2014-03-05 49 views
-1

我有两种情况给出如下。equals和==之间的区别是否与null进行比较?

案例1:

if(folderProcessChecklistBean.getFolderProcessChecklistRecord() 
        .getChecklistCode() != null) 

案例2:

if(!folderProcessChecklistBean.getFolderProcessChecklistRecord() 
        .getChecklistCode().equals(null)) 

谁能告诉我,如果这两种方法是相同的或不?

+1

重复这么多次 – NimChimpsky

+4

@NimChimpsky这重复是错误的,如果通过getChecklistCode()返回的对象实现了平等。 – Maroun

回答

6

你永远无法调用上的对象引用是null.equals()方法。 这是一种方法,就像其余的一样,所以如果对象引用真的是null它只会抛出NullPointerException

如果要检查参考是否未指向任何对象,即它是null参考,则必须使用==

另一方面,如果要比较对象中包含的数据,则使用equals()方法。如果有问题的课程重写equals(),例如String,那么它会比较对象的内容,而不仅仅是它是否是相同的对象引用。

如果您看到一个对象,如==是比较是否相同equals()比较两个框的内容

+0

不错的比喻:) –

2

情况2将不起作用。如果要比较的结果是null,则调用equals(Object)方法将产生NullPointerException。所以,你必须使用情况1.

0

==运算符用于比较两个对象引用相等

equals()检查对象的值相同

案例1

if(folderProcessChecklistBean.getFolderProcessChecklistRecord() 
        .getChecklistCode() != null) 

它会检查物体没有任何对象参考分配给它

情况下2

if(!folderProcessChecklistBean.getFolderProcessChecklistRecord() 
         .getChecklistCode().equals(null)) 

equals是一种方法,如果你尝试调用它在一个空引用,它会抛出一个NullPointerException,你不能解引用对象,它并不是指任何

+2

这不是问的问题,即使是这样,它也会是错误的答案。完全相反。 –

+0

@JeroenVannevel谢谢你的建议我已经更新了我的回答 – Nambi

+0

错误仍然存​​在:'=='检查引用相等,而'.equals()'检查值相等。你应该使用引用平等的原因是为了避免NPE,如上面几个其他的描述。 –

3

你应该总是使用

myObject != null 

因为如果myObject为空

!myObject.equals(null); // <- Exception! null.equals(...); doesn't work! 
    myObject != null;  // <- Quite OK 
0

如果使用案例2

如果回报null,那么它会抛出一个异常,使用equals你可以得到一个异常。

<Object> obj = folderProcessChecklistBean.getFolderProcessChecklistRecord().getChecklistCode(); 
if (obj!=null){...} 
1

结果将是相同的,根据合同Object.equals它说x.equals(null) should return false

相关问题