前段时间在工作中突然发现一个很有趣的问题,下面先贴一段测试代码
Map<Integer, TT> mtt = new HashMap<>();
Map<Integer,Integer> mi = new HashMap<>();
TT t = new TT();
t.setName("吴彦祖");
int s = 1;
mtt.put(1,t);
mi.put(2, s);
System.out.println("mtt="+mtt.get(1).getName());
System.out.println("mi="+mi.get(2));
System.out.println(mtt.get(1)==t);
System.out.println(mi.get(2)==s);
t.setName("刘德华");
s=2;
System.out.println("mtt="+mtt.get(1).getName());
System.out.println("mi="+mi.get(2));
System.out.println(mtt.get(1)==t);
System.out.println(mi.get(2)==s);
TT是一个普通的实体类
打印的结果是
mtt=吴彦祖
mi=1
true
true
mtt=刘德华
mi=1
true
false
结论:到这里大家会发现map的value是引用变量,当他引用的value对象发生变化时,他的value就会发生变化。但是为什么mi这个map,s发生变化时,为什么他的value没有变呢,后面可以看到,s=2之后,这个s已经不是之前的s了,而map的引用依然是之前的s=1
如果以上有什么问题,欢迎各位指出,谢谢!!!