一、简述
第一次使用java做课设的时候,涉及到在运用到集合类存放自定义对象,注意到当你对此自定义对象的某个属性进行修改后,集合类中存储的此对象对应的属性也会发生修改。 后来经过复习java知识发现,java在将自定义对象存入集合类中,表面上是将其“挪”过去了,但是实际上只是存放了此自定义对象的地址,表现为当你对集合类中的此对象抑或是原先定义好的此对象进行修改后,另一方也会对应进行修改。原因就是java实际上是找到了这个对象名称背后的地址,在这个地址块上进行修改,所以后期再调取这个地址块时,无论是哪一方调取,都会因另一方修改而改变。 形象一点的比喻就是说,两个客户端连接了同一个服务器,无论是哪个客户端上对服务器数据进行了修改,另一个客户端再查询这个数据时,都会变化。 具体点就上代码
二、代码
首先是自定义类
public class Test {
private String name;
public Test(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
其次是测试的主函数
public class App {
public static void main(String[] args) {
HashMap<String,Test> hm=new HashMap<>();
Test t=new Test("z");
hm.put("z",t);
t.setName("x");
System.out.println(hm.get("z").getName());
hm.get("z").setName("z");
System.out.println(t.getName());
Test t1=hm.get("z");
t1.setName("c");
System.out.println(t.getName());
System.out.println(hm.get("z").getName());
}
}
这是运行的结果,非常显而易见
|