的键必须是唯一的。Map因此,通过执行 ,因为您正在替换与键 关联的先前值。该方法检查密钥,如果实现是a,它将首先查找密钥,然后再确认等效性。m1.put(B, "anything");B = "A""A"equals()HashMaphashcode()还有一些需要注意的事情,与此无关。Java尝试对包含相同内容的字符串进行重复数据删除(因为a是不可变的,因此可以安全地执行此操作)。因此,很可能并且实际上也会指向同一对象(尽管这取决于JVM)。MapStringString A = "A"String B = "A"String C = new String("A");将强制它创建一个新对象,尽管最新的垃圾回收器也会对此进行重复数据删除,尽管它将是一个不同的包装器对象,但内部的缓冲区将被替换,以便它与其他对象相同。String