你要明白,你传的不是数组,是数组首地址的拷贝。函数在java中叫方法。方法的传值都是值传递,就是将传进来的东西拷贝一份。你传过来一个数组,实际上内存只是创建了数组首地址的拷贝。这个拷贝指向该数组。你vv方法里,re=z,实际上也只是操作两个数组的首地址。你将z数组的首地址赋值给之前的拷贝了。所以只是拷贝指向了{1,2}。跟传进来的re无关。
你要改变传进来的re,只能通过拷贝改变拷贝指向的内容(改变拷贝指向的内容,就改变了re,因为re也是指向该内容的)。这里就是将re=z;换成re[0]=z[0];re[1]=z[1]。
其实在vv()方法里已经把re的内存地址指向z了.但是你并没有返回啊,你只是方法里面这样改动了,但是原来的re数组并没有变动.所有的一切都只是发生在vv()方法里.所以你遍历的还是原来新定义的那个re数组.
以下是我给你修改的代码
public class xxxxxxxxx
{
public static void main(String[] args)
{
int [] re = new int[2];
re=vv(re);
for(int i=0;i
}
private static int[] vv(int[] re)
{
int [] z= {1,2,};
re =z;
return re;
}
}
像这样把你修改的re数组返回并重新把内存地址赋值给re数组
方法中的re和那个re已经不是一回事了。只是他们指向了同一个数组对象。当你这样做的时候re =z;
那么方法中的局部变量re就指向了int [] z= {1,2,};这个数组,而不是 int [] re = new int[2];
改了就才怪了呢,
private static void vv(int[] re) {
re[0] =2;
re[1] =3;
}
你试试