gpt4 book ai didi

java - 关于重写 java 中的 equals 方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:42 25 4
gpt4 key购买 nike

我试图覆盖类中的 equals 和 hashcode 方法。它是另一个未实现 equals 方法和 hashCode 方法的类的子类。

Eclipse 发出以下警告。

  The super class ABC does not implement equals() and hashCode() methods.
The resulting code may not work correctly.

为什么会出现上述警告?在什么情况下它可能无法正常工作?

最佳答案

如果您说 a.equals(b)b.equals(a) ,则预期行为相同是合理的。但是如果它们是通过继承相关的相应类型 BA 并且只有其中一个正确实现了 equals 那么这些行为将有所不同两个例子。

这里,A 是父类(super class),根本没有实现equals(因此它继承了java.lang.Object.equals)。子类 B 重写 equals 以依赖于 name 字段。

class A {

String name;

public A() {
this.name = "Fred";
}

}

class B extends A {

public boolean equals(Object o) {
A a = (A)o;
return a != null && a.name.equals(this.name);
}
}

public class Test {

public static void main(String[] args) {

A a = new A();
B b = new B();

System.out.println(a.equals(b) == b.equals(a));
}
}

不出所料,输出为 false,因此 breaking symmetry .

关于java - 关于重写 java 中的 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com