nak*_*kul 18 java overriding equals
我对我们覆盖该.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;
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我们必须覆盖该.equals()方法.
Gri*_*han 44
从Java中的Override equals和hashCode一文:
java.lang.Object提供的equals()类的默认实现比较内存位置,只有当两个引用变量指向相同的内存位置时才返回true,即基本上它们是同一个对象.
如果要通过逻辑方式或通过某些业务逻辑定义相等性,Java建议覆盖equals和hashCode方法:示例:
Java标准库中的许多类都会覆盖它,例如String覆盖等于,如果两个String对象的内容完全相同,则equals()方法的实现返回true
整数包装类重写等于执行数字比较等.
小智 20
这应该足以回答您的问题:http: //docs.oracle.com/javase/tutorial/java/IandI/objectclass.html
该
equals()方法比较两个对象是否相等,true如果它们相等则返回.该类中equals()提供的方法Object使用identity运算符(==)来确定两个对象是否相等.对于原始数据类型,这会给出正确的结果.但是,对于对象,它没有.equals()通过Object测试对象引用是否相等来提供的方法- 即,如果比较的对象是完全相同的对象.要测试两个对象在等效意义上是否相等(包含相同的信息),您必须覆盖该
equals()方法.
(部分引用 - 点击阅读示例.)
.equals()不会对大多数类执行智能比较,除非该类重写它.如果没有为(用户)类定义它,它的行为与==相同.
参考:http ://www.leepoint.net/notes-java/data/expressions/22compareobjects.html http://www.leepoint.net/data/expressions/22compareobjects.html
| 归档时间: |
|
| 查看次数: |
197622 次 |
| 最近记录: |