默认情况下,Java 类具有引用语义;同一类的两个实例被认为是不同的,即使它们的所有字段都具有相同的值。有时您想要的是值语义,例如String,BigInteger。有一个简单的标准方法来安排它:覆盖equals并hashCode在适当的字段上工作。如果您想要一个在某些上下文中展示引用语义而在其他上下文中展示值语义的类怎么办?(我在这里想到的是表示编译器中间代码的 SSA 指令的类。)实现此目的的一种方法是按equals值和==按引用进行比较。但是,如果您想将这些对象存储在两个不同的哈希表中,一个按引用,另一个按值怎么办?据我了解,如果存在,则HashMap始终使用重写的值equals和方法。hashCode有没有办法告诉HashMap你在这种特殊情况下你想通过引用比较对象?
1 回答

翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
有没有办法告诉 HashMap 在这种特殊情况下你想通过引用比较对象?
不,但是有IdentityHashMap:
此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等代替对象相等
但是,它的使用有很多注意事项,详见 Javadoc。
添加回答
举报
0/150
提交
取消