public class Test{ public static void print(ArrayList a1){
a1.add(2);
a1 = new ArrayList();
a1.add(3);
a1.add(4);
}
public static void main(String[] args){
ArrayList a = new ArrayList();
a.add(1);
print(a);
System.out.println(a.get(1));
}
}
最后的结果是什么?为什么?
LZ能理解,不同的方法中的局部变量是不同吗?
如果能理解这点,就可以理解你的问题了
main方法有个变量a,它指向一个ArrayList对象
调用print方法的时候,print方法有个变量a1,它的值和a一样,也就是它也指向a所指向的ArrayList对象,但是它和main的a是完全不同的两个局部变量
所以print方法中,执行a1 = new ArrayList();让print方法的a1变量指向了新的一个ArrayList对象,但是main方法中的a还是指向原来的ArrayList对象,所以之后因为a1和a不再指向相同的ArrayList,所以a1再追加任何元素也不会对a造成影响
a1 = new ArrayList();
这个a1的值已经引用到另一个对象的地址了
所以后面的操作不会影响a1了
//应该加上
import java.util.ArrayList;public class Test{ public static void print(ArrayList a1){
a1.add(2); //2.a1与a都是指向main()中的1号ArrayList对象,接着存进“2”
a1 = new ArrayList();//3.a1指向了新建的2号ArrayList,
a1.add(3);//4.向2号ArrayList存“3”
a1.add(4);//5.向2号ArrayList存“4”
}
public static void main(String[] args){
ArrayList a = new ArrayList();
a.add(1); //1.向1号ArrayList对象存进“1”
print(a);
System.out.println(a.get(1));//6.打印1号ArrayList对象中的位置1上的元素(位置编号从0开始的),所以输出结果:2
}
}
结果:
2