在引用和值语义之间切换

默认情况下,Java 类具有引用语义;同一类的两个实例被认为是不同的,即使它们的所有字段都具有相同的值。

有时您想要的是值语义,例如StringBigInteger。有一个简单的标准方法来安排它:覆盖equalshashCode在适当的字段上工作。

如果您想要一个在某些上下文中展示引用语义而在其他上下文中展示值语义的类怎么办?(我在这里想到的是表示编译器中间代码的 SSA 指令的类。)实现此目的的一种方法是按equals值和==按引用进行比较。

但是,如果您想将这些对象存储在两个不同的哈希表中,一个按引用,另一个按值怎么办?据我了解,如果存在,则HashMap始终使用重写的值equals和方法。hashCode

有没有办法告诉HashMap你在这种特殊情况下你想通过引用比较对象?


狐的传说
浏览 126回答 1
1回答

翻翻过去那场雪

有没有办法告诉 HashMap 在这种特殊情况下你想通过引用比较对象?不,但是有IdentityHashMap:此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等代替对象相等但是,它的使用有很多注意事项,详见 Javadoc。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java