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 ??
答案 0 :(得分:0)
Map
的键必须唯一。
因此,通过执行m1.put(B, "anything");
,由于B = "A"
您将替换与键"A"
关联的先前值。密钥通过equals()
方法进行检查,如果实现是HashMap
,则在确认等效性之前,它将首先通过hashcode()
查找密钥。
还有一点需要注意的地方,与Map
无关。 Java尝试对包含相同内容的字符串进行重复数据删除(因为String
是不可变的,因此可以安全地做到这一点)。因此,String A = "A"
和String B = "A"
实际上也可能指向相同的对象(尽管这取决于JVM)。
String C = new String("A");
将迫使它创建一个新的String
对象,尽管最新的垃圾收集器也将deduplicate这样做,尽管它将是一个不同的包装对象,但内部的缓冲区将是替换为与其他相同。
答案 1 :(得分:0)
Java字符串是不可变的,并且字符串的行为无法更改。每次进行任何更改时,它都会创建新的String而不是更新值。因此,在这里,所有String对象的值“ A”都相同,而哈希码对于所有三个对象也都相同。哈希图中的所有三个值都指向相同的哈希码。