我试图理解为什么在使用作为HashMap键时,String和Stringbuilder/StringBuffer的处理方式是不同的。让我通过以下示例说明我的困惑:
示例1,使用String:
String s1 = new String("abc");
String s2 = new String("abc");
HashMap hm = new HashMap();
hm.put(s1, 1);
hm.put(s2, 2);
System.out.println(hm.size());
上面的代码段会输出“1”。
例2,使用StringBuilder(或StringBuffer):
StringBuilder sb1 = new StringBuilder("abc");
StringBuilder sb2 = new StringBuilder("abc");
HashMap hm = new HashMap();
hm.put(sb1, 1);
hm.put(sb2, 2);
System.out.println(hm.size());
上面的代码片段打印出'2'。
有人可以解释一下为什么行为不同吗?
sb1.equals(sb2)
的返回值为 false。 - user395760