0

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

   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");
    } 

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

equals 方法在这里比较什么?

提前致谢 ...

4

5 回答 5

3

来自Object.equals JavaDoc:

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

于 2013-08-22T09:40:24.017 回答
2

它还将比较参考,如此所述:

equals 方法在非空对象引用上实现等价关系:

它是自反的:对于任何非空引用值 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。

于 2013-08-22T09:39:43.073 回答
1

null如果两个对象都是

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

如果你尝试去做ob1.equals(null)你会得到NullPointerException。由于 ob1 它 self null

于 2013-08-22T09:41:28.743 回答
0
  1. == 运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。

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

但是您正在使用Objectequals()方法。

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

注意:此默认实现被覆盖以在 String、Wrapper 类等类中进行内容比较。

于 2013-08-22T09:51:17.333 回答
0

虽然对于X.equals(Y)应该意味着什么(即它应该回答什么“问题”)存在一些不一致,但两个有用的问题是:

  • 当对象按预期使用时,是否应该将某些引用替换为预期不会改变其行为X的引用?Y

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

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

虽然是否Object应该是具体类型尚有争议,但实例的唯一Object用途是作为身份令牌。因此,作为Object具体类型的事实意味着它的equals方法应该测试身份。

于 2013-09-11T23:07:50.813 回答