我的代码如下:
public class Test{
int a;
public static void main(String[] args){
Test t1 = new Test();
Test t2 = new Test();
if(!t1.equals(t2))
System.out.println("They're not equal");
if(t1 instanceof Test)
System.out.println("True");
}
}
这是输出:
They're not equal
True
我甚至尝试将相同的值分配给这两个对象的实例变量'a'
,如下所示
t1.a = 10;
t2.a = 10;
仍然是相同的输出。
我可以知道t1.equals(t2)
何时会返回 True ?
equals()
方法如何处理对象?
答案 0 :(得分:2)
默认情况下,调用equals
执行equals
类的Object
方法,只有在将实例与自身进行比较时才返回true。
您可以在其他类中重写此方法,以便当两个对象的属性相等时equals
将返回true。
例如:
@Override
public boolean equals(Object other)
{
if (other == null)
return false;
if (other instance of Test) {
Test t = (test) other;
return this.a == t.a;
}
return false;
}
将此方法添加到Test
课程会将t1.equals(t2)
的结果更改为true
。
答案 1 :(得分:1)
Object.equals(Object)
Javadoc说(部分),
指示某个其他对象是否等于"这个。
equals方法在非null对象引用上实现等价关系:
- 它是自反的:对于任何非空引用值x,x.equals(x)应该返回true。
- 它是对称的:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。
- 它是传递性的:对于任何非空引用值x,y和z,如果x.equals(y)返回true而y.equals(z)返回true,则x.equals(z)应返回true
- 它是一致的:对于任何非空引用值x和y,x.equals(y)的多次调用始终返回true或始终返回false,前提是没有修改在对象上的equals比较中使用的信息。
- 对于任何非空引用值x,x.equals(null)应返回false。
对于您的代码,您可以覆盖equals
,如
@Override
public boolean equals(Object o) {
if (o instanceof Test) {
return ((Test) o).a == a;
}
return false;
}
答案 2 :(得分:0)
Object.equals的默认实现只有在两个对象完全相同的对象时才会将它们视为相等,而不仅仅是相同的内容,而是相同的引用。
对象可以有不同的equals实现,但是你必须明确地对它们进行编程:如果你想检查所有字段是否相等,你必须实际编写一个检查它的equals实现。