public class A {
public static void main(String[] args) {
int[] a = new int[3];
int[] b = null;
init(a,b);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
private static void init(int[] a,int[] b){
a[0] = 1;
b = a;
b[1] = 2;
a = null;
}
}
为什么输出的是[1,2,0],null
而不是[1,0,0],[1,2,0]?
在init里可以修改对象的内部状态,但是让这个对象直接指向另一个对象,不会作用到调用者上。
所以你改变了a的a[0] a[1],a[2]没有改变默认就是0,你函数里v = a,之后修改的还是a那个数组,但是这个b指向另一个对象,不会作用到main的b上,b还是null
好比
void init(int a, int b)
{
a = 1234;
b = 4321;
}
main()
{
a = 1;
b = 2;
init(a,b);
a和b还是1和2
}