equals 和 hashCode 方法:使用它们的原因和位置,以及它们的工作原理
“现在我将告诉您一些同样有用的方法: equals(Object o) 和 hashCode()。”
“您可能已经记得,在 Java 中,比较引用变量时不会比较对象本身,而是比较对对象的引用。”
| 代码 | 解释 |
|---|---|
| i 不等于 j 变量指向不同的对象。 即使对象包含相同的数据。 |
| 我等于 j。这些变量包含对同一对象的引用。 |
“是的,我记得那个。”
平等 。_
“equals方法是这里的标准解决方案。equals方法的目的是通过比较对象内部存储的内容来确定对象内部是否相同。”
“它是怎么做到的?”
“这与 toString() 方法非常相似。”
Object 类有自己的 equals 方法实现,它只是比较引用:
public boolean equals(Object obj) { return (this == obj); }“太好了……又回到那个时候了,是吗?”
“扬起你的下巴!这其实很棘手。”
“创建此方法是为了让开发人员可以在自己的类中覆盖它。毕竟,只有类的开发人员才知道比较时哪些数据是相关的,哪些不是。”
“你能举个例子吗?”
“当然。假设我们有一个表示数学分数的类。它看起来像这样:”
例子:
class Fraction { private int numerator; private int denominator; Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; }public boolean equals(Object obj) { if (obj==null) return false; if (obj.getClass() != this.getClass() ) return false; Fraction other = (Fraction) obj; return this.numerator* other.denominator == this.denominat