5、Java 类型系统深度解析

Java 类型系统深度解析

1. 相等性与哈希码

在 Java 编程中,正确处理对象的相等性和哈希码是一项微妙且具有挑战性的任务。常见的错误之一是违反自反性,即定义一个新类,使其有时与现有类相等。例如,假设程序使用了一个定义了 EnglishWeekdays 类的现有库,现在定义了一个 FrenchWeekdays 类。很容易为 FrenchWeekdays 定义一个 equals 方法,当将 EnglishWeekdays 的一个实例与对应的法语实例进行比较时返回 true 。但千万不要这样做!现有的 EnglishWeekdays 类并不知道新定义的 FrenchWeekdays 类,因此永远不会将 FrenchWeekdays 的实例识别为相等,这就破坏了自反性。

hashCode equals 应该被视为一对:如果重写了其中一个,就应该重写另一个。许多库例程将 hashCode 视为判断两个对象是否相等的优化粗略猜测。这些库首先比较两个对象的哈希码,如果两个哈希码不同,它们就认为不需要进行更昂贵的比较,因为对象肯定不同。哈希码计算的要点是快速计算出一个能很好替代 equals 方法的结果。为了计算哈希码而遍历大型数组的每个元素,可能并不比实际比较更快。而另一个极端是,总是从哈希码计算中返回 0,虽然速度很

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值