比较空对象

时间:2013-08-22 09:37:52

标签: java

我有一个问题    我有两个空对象,我使用equals()方法来比较它们,因为我们知道equals方法比较一个Object的内容,但在这种情况下我没有任何属性到我的对象

   Object ob1 = new Object();
   Object ob2 = new Object();
    if(ob1.equals(ob2)){
        System.out.println(" they are Equal");
    }
    else{ 
        System.out.println("not equal");
    }
    if(ob1 == ob2){
        System.out.println(" they are Equal");
    }
    else{ 
        System.out.println("not equal");
    } 

我们知道==将比较对象的引用

什么等于方法比较?

提前感谢...

5 个答案:

答案 0 :(得分:3)

来自Object.equals JavaDoc:

类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。

答案 1 :(得分:2)

它还会比较参考文献,如here所述:

  

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。

答案 2 :(得分:1)

如果两个对象都是null,那么

 if(ob1==null && ob2==null)

如果您尝试ob1.equals(null),您将获得NullPointerException。因为ob1是自我null

答案 3 :(得分:0)

  
      
  1. ==运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。

  2.   
  3. equals()方法主要目的是比较两个对象的状态或对象的内容。

  4.   

但您使用的是Objectequals()方法。

  

equals()方法的对象类默认实现类似于==,意味着如果它们指向同一位置,它将检查对象的内存引用。

注意: 重写此默认实现以在String,Wrapper类等类中进行内容比较。

答案 4 :(得分:0)

虽然X.equals(Y)应该是什么意思不一致(即应该回答什么“问题”),但有两个有用的问题是:

  • 如果按预期使用对象,是否应该将对X的引用替换为引用Y,以免改变其行为?

  • 当按预期使用对象时,会将X的所有引用交换为Y,反之亦然 ,预计不会改变他们的行为?

如果Object定义hashCode()为所有空对象返回相同的值,并且equals在将任何两个空对象相互比较时返回true,则这些定义将满足# 1。另一方面,任何定义equals以测试引用相等性而hashCode返回identityHashCode的对象 满足#1(如果X Y是不同的实例,X.equals(X)为真但Y.equals(X)为假的事实本身就是将对象视为不同的充分理由。

虽然Object是否应该是具体类型值得商榷,但{em>仅使用Object实例作为身份令牌。因此,Object是具体类型的事实意味着其equals方法应该测试身份。