首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

List 传参 摘引 赋值null

2012-12-18 
List 传参 引用 赋值nullpublic class TestThread {public void test(){List list new ArrayList()Test

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变量的值实际上并没有发生改变,这样解释不知道对你有没有帮助

热点排行