java Equals方法中的自反性
我正在阅读如何在Java中正确重写equals,并在本示例中运行。我的第一个想法是它会通过反射属性,但显然它不会 它基本上返回false,因为这一行:java Equals方法中的自反性,java,reference,equals,Java,Reference,Equals,我正在阅读如何在Java中正确重写equals,并在本示例中运行。我的第一个想法是它会通过反射属性,但显然它不会 它基本上返回false,因为这一行:if(this!=tc)返回true 但是,如果不检查同一个实例tc1,那么tc1.equals(tc1)会不会传递引用tc1的副本,这意味着它们都指向同一个TestClass对象,因此this和tc1本质上指向同一个对象 class TestClass { int someVar; TestClass(int i) {
if(this!=tc)返回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”之间的差异
两个引用之间的相等性通过“==”运算符完成。
equals方法用于通过值测试平等性,这就是为什么可以根据函数需要覆盖它
关于您的代码:
- tc1==tc1->TRUE
- tc1.等于(tc1)->FALSE
我想你的一些if声明已经扭转了
这里的传统方法看起来像这样
public boolean equals(Object that){
if (this == that) {
return true;
}
if (that instanceof TestClass && this.someVar == ((TestClass) that).someVar ) {
return true;
}
return false;
}
所以,如果它们不相等,那么它们是相等的吗?某个东西怎么能从一行代码中“返回false”。。。返回true代码>?不确定您的意思,由于这行代码“if(this!=tc)return true;”@Sotirios,感谢您的注意,因此该代码确实返回false。我实际上是想让这个例子做一些不同的事情,我将调整这个例子。@user1529412这不仅仅是if条件,它返回false是因为紧接着是else条件。如果您使用equals
方法将对象与自身进行比较,它将返回false,因为在这种情况下,您显式测试将返回false。