StringBuffer 可以用作 HashMap 中的键吗?

sun*_*ish 2 java hashmap

StringBuffer 可以作为 HashMap 中的键吗?
如果是这样,使用 String 和 StringBuffer 作为键有什么区别?

ars*_*jii 5

StringBuffer 可以作为 HashMap 中的键吗?

不,因为StringBuffer既不覆盖equals也不覆盖hashCode,所以它不适合作为HashMap键(回想一下,HashMap依赖于这两种方法来判断地图中是否存在给定键)。

除此之外,StringBuffers 是可变的,您通常希望Map键是不可变的。来自Map

注意:如果将可变对象用作映射键,则必须非常小心。如果对象的值以影响equals比较的方式更改,而对象是映射中的键,则不会指定映射的行为。此禁令的一个特殊情况是不允许映射将自身包含为键。虽然允许地图将自身包含为值,但建议格外小心:在此类地图上不再明确定义equalshashCode方法。