我有一个类 Client 理由 有4个属性 id name 分别都是StringBuffer 类型的
我先给他们赋值
Client cl = new Client();
cl.setId(new StringBuffer("2"));
cl.setName(new StringBuffer("ddd"));
cl.setRe(new StringBuffer("1"));
cl.setTel(new StringBuffer("2"));
然后 我克隆出一个对象 放到 po 里
Client po = (Client) cl.clone();
用str 引用 po.getName();
StringBuffer str = po.getName();
然后给str 赋值
str.append("fff");
下面同理
Client po1 = (Client) cl.clone();
StringBuffer str1 = po1.getName();
str1.append("eee");
list.add(po);
if(str == str1){
System.out.println("=======");
}
for (MyBasicPojo f1 : list) {
System.out.println(((Client)f1).getName());
}
最后控制台 输出的是
=======
dddfffeee
dddfffeee我怎么也弄不明白 怎么样 才能 避免这种问题啊
我先给他们赋值
Client cl = new Client();
cl.setId(new StringBuffer("2"));
cl.setName(new StringBuffer("ddd"));
cl.setRe(new StringBuffer("1"));
cl.setTel(new StringBuffer("2"));
然后 我克隆出一个对象 放到 po 里
Client po = (Client) cl.clone();
用str 引用 po.getName();
StringBuffer str = po.getName();
然后给str 赋值
str.append("fff");
下面同理
Client po1 = (Client) cl.clone();
StringBuffer str1 = po1.getName();
str1.append("eee");
list.add(po);
if(str == str1){
System.out.println("=======");
}
for (MyBasicPojo f1 : list) {
System.out.println(((Client)f1).getName());
}
最后控制台 输出的是
=======
dddfffeee
dddfffeee我怎么也弄不明白 怎么样 才能 避免这种问题啊
参考这个修改你的克隆属性方法
public class A implements Cloneable {
public String name[];
public A(){
name=new String[2];
}
public Object clone() {
A o = null;
try {
o = (A) super.clone();
o.name=(String[])name.clone();//
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}