List 传参 引用 赋值null
public class TestThread {
public void test(){
List list = new ArrayList();
TestThread tt = new TestThread();
tt.test2(list);
System.out.println("test2调用后"+list.size());
tt.test3(list);
System.out.println("test3调用后"+list.size());
}
public void test2(List list){
//list =null;
list=new ArrayList();
list.add("test2的值1");
list.add("test2的值2");
}
public void test3(List list){
if(list!=null){
list.add("你好,我还是来了");
}
}
}
这是个关于栈内存和堆内存的问题
List list = new ArrayList();
这句执行完以后实际在栈内存中产生一个list变量,在堆内存中产生一个ArrayList的对象,list变量的值实际上是堆内存Arraylist的地址,Java中虽然没有指针的概念,这个叫引用,为了便于理解也可以想象成list指向ArrayList
在程序执行了test2(list);之后,实际上在栈内存中又产生了一个新的变量,该变量是传入参数list的复制,这时候你可以理解成在栈内存中存在两个变量,一个是main方法中定义的list变量,一个是test2方法中定义的list变量的复制,两个变量都指向堆内存中存在的ArrayList对象, 然后在tese2()方法中你执行 list=null;实际上只是改变了在test2中生成的list变量复制的值,list变量的值实际上并没有发生改变,这样解释不知道对你有没有帮助