我们什么时候说Object1 .equals(Object2)是真的?

时间:2014-12-11 07:22:21

标签: java object equals

我的代码如下:

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()方法如何处理对象?

3 个答案:

答案 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实现。