为了账号安全,请及时绑定邮箱和手机立即绑定

在引用和值语义之间切换

在引用和值语义之间切换

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

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

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

不,但是有IdentityHashMap

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等代替对象相等

但是,它的使用有很多注意事项,详见 Javadoc。


查看完整回答
反对 回复 2023-03-23
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号