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
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
this.list = list; //因为这里只是引用赋值,list并不是拷贝
this.iorder = iorder;
this.property = property;
}
clone对象 两个对象里的域是共享的
所以两个list里面的内容是指向统一内存空间的 所以一个变另一个也变java核心技术 那本书里有讲到
List list2 = list;list.add("aa");经测试list2也改变了.
这里的list2相当与private List list;中的list
跟传参不一样的
传参 穿进去的是clone的
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引用的内容改变
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());
}
}