在这个例子中如何使用hashamp中的Mutable键?

M S*_*ach 4 java hashmap immutability

  HashMap hm = new HashMap();
  StringBuilder sb = new StringBuilder("test");
  hm.put(sb, "second");
  // above code gets hacode for sb and places it corresponding bucket

  sb.append("123");// with appending of "123", sb hascode will change

  System.out.println("element is is" + hm.get(sb));// print "second"
Run Code Online (Sandbox Code Playgroud)

现在hm.get(sb)应该根据新的哈希码搜索存储桶中的密钥.所以它不应该在该桶下获得任何对象并且应该为null.那为什么它会变得"第二"呢?

rge*_*man 7

StringBuilder类不重写hashCode,所以它继承hashCode从方法Object.因此,StringBuilder's内容不会影响哈希码,即使你改变它的内容,HashMap它仍然能够找到StringBuilder.