2013-08-22 291 views
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方法比较这里的参考?

在此先感谢...

+1

对不起 - 不得不投票,因为这在JavaDocs中很明显得到了回答。 –

+1

'equals()'不会像您认为的那样比较对象的内容。它在被调用的对象的类中使用'equals()'的实现来比较对象。这个'equals()'方法可以根据对象的类型做各种不同的事情。在Object中,如果两个实例完全相同,equals()会认为两个实例相等。 –

+1

它与'=='运算符做同样的事情。看看Objest.equals来源。 – aim

回答

2

它也将比较参考,如前所述here

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

这是反身:对于任何非空引用值x,x.equals(x)应该返回true。
它是对称的:对于任何非空引用值x和y,x.equals(Y),当且仅当y.equals(x)返回真应返回true。
传递性:对于任何非空引用值x,y和z,如果x.equals(y)的返回true并且y.equals(z)的返回true,那么x.equals(z)的应返回true。
它是一致的:对于任何非空引用值x和y,x.equals(Y)的多个调用始终返回true或始终返回假,没有设置中使用的信息等于在对象上比较被修改。
对于任何非空引用值x,x.equals(空)应该返回false。

3

Object.equals的JavaDoc:

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

1

如果两个对象是null然后

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

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

0
  1. ==运算符比较对象的基准或内存位置中的堆,它们是否指向相同的位置与否。

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

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

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

注意: 这个默认实现被覆盖,以在像String,Wrapper类这样的类中进行内容比较。

0

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

  • 当对象按规定使用,应该更换一些参考X参考Y预计不会改变他们的行为?

  • 当如预期使用目的,将交换所有引用X与引用Y反之亦然,预计不会改变自己的行为?

如果定义hashCode()为所有空的对象返回相同的值Object,并equals来比较任意两个空的对象,对方的时候返回true,这些定义便会符合#1。在另一方面,它定义equals测试参考平等和hashCode任何对象返回identityHashCode满足#1(如果XY是不同的情况下,该事实X.equals(X)是真实的,但Y.equals(X)是假是,在和本身,充分的理由把它们当作不同。

虽然这是值得商榷的Object是否应该有一个具体的类型,只有使用Object一个实例是作为身份象征。因此,这一事实,Object是一个具体的类型意味着它的方法应该测试标识符TY。