String A="A"; String B="A"; String C= new String("A"); Map m1=new HashMap<String,String>(); m1.put(A,"A"); m1.put(B,"A"); m1.put(C,"A"); System.out.println(m1.size());为什么地图大小是1,任何人都可以解释工作,也可以解释地图大小如何是1???
2 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
的键必须是唯一的。Map
因此,通过执行 ,因为您正在替换与键 关联的先前值。该方法检查密钥,如果实现是a,它将首先查找密钥,然后再确认等效性。m1.put(B, "anything");
B = "A"
"A"
equals()
HashMap
hashcode()
还有一些需要注意的事情,与此无关。Java尝试对包含相同内容的字符串进行重复数据删除(因为a是不可变的,因此可以安全地执行此操作)。因此,很可能并且实际上也会指向同一对象(尽管这取决于JVM)。Map
String
String A = "A"
String B = "A"
String C = new String("A");
将强制它创建一个新对象,尽管最新的垃圾回收器也会对此进行重复数据删除,尽管它将是一个不同的包装器对象,但内部的缓冲区将被替换,以便它与其他对象相同。String
精慕HU
TA贡献1845条经验 获得超8个赞
Java 字符串是不可变的,字符串的行为无法更改。每次进行任何更改时,它都会创建新的 String,而不是更新值。因此,此处的值“A”对于所有 String 对象都是相同的,对于所有三个对象,哈希代码也是相同的。哈希图中的所有三个值都指向相同的哈希代码。
添加回答
举报
0/150
提交
取消