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