我对我们覆盖 .equals
方法的原因有些困惑。
例如:
Test test1 = new Test(3);
Test test2 = new Test(3);
//The if comparison does the same thing that the overridden `.equals()` method does.
if(test1.equals(test2)){
System.out.println("test1 and test2 are true in .equals()");
}
// Override .equals method.
public boolean equals(Object object) {
if(object instanceof Test && ((Test)object).getValue() == this.t) {
return true;
} else {
return false;
}
}
我不明白为什么我们必须覆盖 .equals()
方法。
最佳答案
来自文章Override equals and hashCode in Java :
Default implementation of equals() class provided by java.lang.Object compares memory location and only return true if two reference variable are pointing to same memory location i.e. essentially they are same object.
Java recommends to override equals and hashCode method if equality is going to be defined by logical way or via some business logic: example:
many classes in Java standard library does override it e.g. String overrides equals, whose implementation of equals() method return true if content of two String objects are exactly same
Integer wrapper class overrides equals to perform numerical comparison etc.
关于java - 为什么我们必须重写 Java 中的 equals() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175109/