java 中的自反 属性 等于方法
Reflexive property in java Equals method
我正在阅读有关如何将 Java 和 运行 中的等号正确覆盖到此示例中的信息。我的第一个想法是它会通过自反 属性,但显然它不会。
它基本上 returns 错误,因为这一行:if(this != tc) return true;
但是没有检查同一个实例 tc1,所以 tc1.equals(tc1),它不会传递引用 tc1 的副本吗,这意味着它们都指向同一个 TestClass 对象,因此this 和 tc1 本质上指向同一个对象?
class TestClass {
int someVar;
TestClass(int i) {
someVar=i;
}
public boolean equals(Object tc) {
if (tc instanceof TestClass && this.someVar == ((TestClass) tc).someVar) {
if (this != tc) {
return true;
} else {
return false;
}
}
return false;
}
public int hashCode() {
return 1;
}
}
public class HashDemo {
public static void main(String []args) {
TestClass tc1 = new TestClass(20);
System.out.println(tc1.equals(tc1));
}
}
这显然不是重写 equals 方法的正确方法,但它可以让您指出“==”和 "equals" 在 Objects
上的区别
两个引用之间的相等性是通过“==”运算符完成的。
equals 方法用于通过值来测试平等性,这就是为什么您可以根据您的功能需要覆盖它。
关于您的代码:
- tc1 == tc1 -> 真
- tc1.equals(tc1) -> 错误
我想你的一些 if 语句已经转过来了。
这里的常规 equals 方法看起来像这样。
public boolean equals(Object that){
if (this == that) {
return true;
}
if (that instanceof TestClass && this.someVar == ((TestClass) that).someVar ) {
return true;
}
return false;
}
我正在阅读有关如何将 Java 和 运行 中的等号正确覆盖到此示例中的信息。我的第一个想法是它会通过自反 属性,但显然它不会。
它基本上 returns 错误,因为这一行:if(this != tc) return true;
但是没有检查同一个实例 tc1,所以 tc1.equals(tc1),它不会传递引用 tc1 的副本吗,这意味着它们都指向同一个 TestClass 对象,因此this 和 tc1 本质上指向同一个对象?
class TestClass {
int someVar;
TestClass(int i) {
someVar=i;
}
public boolean equals(Object tc) {
if (tc instanceof TestClass && this.someVar == ((TestClass) tc).someVar) {
if (this != tc) {
return true;
} else {
return false;
}
}
return false;
}
public int hashCode() {
return 1;
}
}
public class HashDemo {
public static void main(String []args) {
TestClass tc1 = new TestClass(20);
System.out.println(tc1.equals(tc1));
}
}
这显然不是重写 equals 方法的正确方法,但它可以让您指出“==”和 "equals" 在 Objects
上的区别两个引用之间的相等性是通过“==”运算符完成的。 equals 方法用于通过值来测试平等性,这就是为什么您可以根据您的功能需要覆盖它。
关于您的代码:
- tc1 == tc1 -> 真
- tc1.equals(tc1) -> 错误
我想你的一些 if 语句已经转过来了。
这里的常规 equals 方法看起来像这样。
public boolean equals(Object that){
if (this == that) {
return true;
}
if (that instanceof TestClass && this.someVar == ((TestClass) that).someVar ) {
return true;
}
return false;
}