java中的对象是地址引用,如:HashMap,通过key取得object,修改了oject的属性后,不用重新替换掉原hashMap中的对象,它会自动更新。这种方法很好用,但有时也要仔细使用。如果只想取一个备份的object处理,那则需要重新new一个对象,然后进行值拷贝(将value一个个复制过去s)。
一个例子:
类:PoP
public PoP(int is_show) {
super();
this.is_show = is_show;
}
public int getIs_show() {
return is_show;
}
public void setIs_show(int is_show) {
this.is_show = is_show;
}
}
测试类:TestPoP
import java.util.HashMap;
import java.util.Map;
public class TestPoP {
public static void main(String [] args){
PoP pop1=new PoP(0);
Map map=new HashMap();
map.put("001",pop1);
pop1=(PoP) map.get("001");
PoP pop3=pop1;
PoP pop4=new PoP(0);
pop4=pop1;
PoP pop5=new PoP(0);
pop5.setIs_show(pop1.getIs_show());
System.out.println("修改前:pop1,is_show:"+pop1.getIs_show());
pop1.setIs_show(1);
pop1=(PoP)map.get("001");
System.out.println("修改后,pop1,is_show:"+pop1.getIs_show());
System.out.println("地址引用,pop3,is_show:"+pop3.getIs_show());
System.out.println("重新new了一个,pop4,is_show:"+pop4.getIs_show());
System.out.println("new了一个对象,pop5,进行值拷贝:"+pop5.getIs_show());
}
}
输出结果:
修改前:pop1,is_show:0
修改后,pop1,is_show:1
地址引用,pop3,is_show:1
重新new了一个,pop4,is_show:1
new了一个对象,pop5,进行值拷贝:0