Java 类型系统深度解析
1. 相等性与哈希码
在 Java 编程中,正确处理对象的相等性和哈希码是一项微妙且具有挑战性的任务。常见的错误之一是违反自反性,即定义一个新类,使其有时与现有类相等。例如,假设程序使用了一个定义了 EnglishWeekdays 类的现有库,现在定义了一个 FrenchWeekdays 类。很容易为 FrenchWeekdays 定义一个 equals 方法,当将 EnglishWeekdays 的一个实例与对应的法语实例进行比较时返回 true 。但千万不要这样做!现有的 EnglishWeekdays 类并不知道新定义的 FrenchWeekdays 类,因此永远不会将 FrenchWeekdays 的实例识别为相等,这就破坏了自反性。
hashCode 和 equals 应该被视为一对:如果重写了其中一个,就应该重写另一个。许多库例程将 hashCode 视为判断两个对象是否相等的优化粗略猜测。这些库首先比较两个对象的哈希码,如果两个哈希码不同,它们就认为不需要进行更昂贵的比较,因为对象肯定不同。哈希码计算的要点是快速计算出一个能很好替代 equals 方法的结果。为了计算哈希码而遍历大型数组的每个元素,可能并不比实际比较更快。而另一个极端是,总是从哈希码计算中返回 0,虽然速度很
超级会员免费看
订阅专栏 解锁全文
1587

被折叠的 条评论
为什么被折叠?



