Test2 test = new Test2(list,0,"error1");都已经构建完了,我在后面在加上list.add("aaa"),test中的list为什么会被改变(为什么还会把"aaa"加入到test的list中)实在不明白,望高手指点。import java.util.ArrayList;
import java.util.List;public class Test { public static void main(String[] args) {
List list = new ArrayList();
Test2 test = new Test2(list,0,"error1");
list.add("aaaa");

System.out.println(test.getList().size());
}
}import java.util.List;public class Test2 {
private List list;
private int iorder;
private String property;

Test2(List list, int iorder, String property) {
this.list = list;
this.iorder = iorder;
this.property = property;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getIorder() {
return iorder;
}
public void setIorder(int iorder) {
this.iorder = iorder;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
}
弄不明白的是test

解决方案 »

  1.   

     Test2(List list, int iorder, String property) {
            this.list = list;  //因为这里只是引用赋值,list并不是拷贝
            this.iorder = iorder;
            this.property = property;
        }
      

  2.   

    泛型数组啊,它的大小在编译时可以不用确定,允许在运行时确定数组的大小,并且它具有自动调节数组容量的功能,使用add方法可以讲元素添加到数组列表中。
      

  3.   

    传参 其实是clone进去的
    clone对象  两个对象里的域是共享的
    所以两个list里面的内容是指向统一内存空间的 所以一个变另一个也变java核心技术 那本书里有讲到
      

  4.   

    List list  = new ArrayList();
    List list2 = list;list.add("aa");经测试list2也改变了.
    这里的list2相当与private List list;中的list
      

  5.   

    楼上的那个list2 和list那是别名现象
    跟传参不一样的
    传参 穿进去的是clone的
      

  6.   


    Test2(List list, int iorder, String property) {
            this.list = list;      //把参数list的引用地址赋值给this.list,所以两个指向同一地址
            this.iorder = iorder;
            this.property = property;
        }
        List list = new ArrayList();
    Test2 test = new Test2(list,0,"error1");   //把list的引用地址传进去了,结果test.list跟list指向同一地址
            list.add("aaaa");  //list引用的内容改变,即text.list引用的内容改变
      

  7.   


    public class Test {    public static void main(String[] args) {
            List list = new ArrayList(); 
            Test2 test = new Test2(list,0,"error1");
            list.add("aaaa");// list 与 test.list 引用的是同一个实例,所以通过两个引用的任一个都改变同一个实例的内容
            
            System.out.println(test.getList().size());
        }
    }