我今天看了sun的说明,说Arraylist的clone是浅拷贝:Returns a shallow copy of this ArrayList instance. (The elements themselves are not copied.) 。
但是我今天写了一段代码,结果感觉更像是深拷贝,
代码如下:ArrayList<String> t=new ArrayList<String>();
for(int i=0;i<10;i++){
t.add(String.valueOf(i));
}
System.out.println(t.get(1));
ArrayList<String> t1=(ArrayList<String>) t.clone();
t1.set(1, "tcd");
System.out.println(t.get(1));
System.out.println(t1.get(1));
System.out.println(t1.get(2)+"||||"+t.get(2));
输出结果:
1
1
tcd
2||||2
但是我今天写了一段代码,结果感觉更像是深拷贝,
代码如下:ArrayList<String> t=new ArrayList<String>();
for(int i=0;i<10;i++){
t.add(String.valueOf(i));
}
System.out.println(t.get(1));
ArrayList<String> t1=(ArrayList<String>) t.clone();
t1.set(1, "tcd");
System.out.println(t.get(1));
System.out.println(t1.get(1));
System.out.println(t1.get(2)+"||||"+t.get(2));
输出结果:
1
1
tcd
2||||2
解决方案 »
- hibernate是操作对象快还是写hql针对属性做update或delete快呢
- 求解一个struts2里支持ajxa的问题,纠结死了
- jpa写法:where in ()语句
- 【烦恼中】【100分一个关于“焦点”的js问题】
- 请教如何通过WSDL2Java生成的客户端获得Asynchronous BPEL的反馈?
- 我想问下关于权限的问题
- 求<<精通EJB>>2.0的中文版
- 按照旧版本WebLogic时,它所带的Jdk1.3把我的jdk1.5覆盖了,怎么办?
- 如何制作树表??
- XML schema 小问题。.....
- axis2通过wsdl地址生成客户端报错(https网址)
- javaEE问题求助
深拷贝就是不光拷贝出来的是一个新的对象,该对象的属性也是新的对象(也就是拷贝出来的对象和原来的对象没有任何交集,只是内容一样)
浅拷贝就是拷贝出来的是一个新的对象,但是该对象的属性和原来对象的属性是同一个对象(也就是拷贝出来的对象和原来的对象有交集,并不完全独立)
你的测试代码的思路就不正确,应该这样测试ArrayList<String> t=new ArrayList<String>();
for(int i=0;i<10;i++){
t.add(String.valueOf(i));
}
ArrayList<String> t1=(ArrayList<String>) t.clone();
System.out.println(t==t1); //这里必然是false,因为拷贝出来的对象和原来对象不是同一个
for (int i=0; i<10; i++) {
System.out.println(t.get(i)==t1.get(i)); //然是,如果是前拷贝,这里就是true,属性有交集;而如果是深拷贝,这里就是false
}