equals和==之间的差异与null比较?

时间:2014-03-05 12:20:30

标签: java object operators equals record

我有以下两种情况。

案例1:

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

案例2:

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

有人可以告诉我两种方法是否相同?

6 个答案:

答案 0 :(得分:6)

您永远不能在.equals()的对象引用上调用null方法。 这是一个方法,就像其他方法一样,所以如果对象引用真的是null,它只会抛出一个NullPointerException

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

如果要比较对象中包含的数据,则使用equals()方法。如果有问题的类覆盖了equals(),例如String,那么它将比较对象的内容,而不仅仅是它是否是相同的对象引用。

如果您看到像这样的对象。 ==正在比较它是否是相同的,而equals()比较两个的内容。

答案 1 :(得分:3)

总是使用

  myObject != null

因为如果myObject 为空

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

答案 2 :(得分:2)

案例2不起作用。如果您要比较的结果为null,则equals(Object)方法的调用将引发NullPointerException。所以你必须使用案例1。

答案 3 :(得分:1)

如果getChecklistCode()返回的Object根据Object.equals合同实现等于x.equals(null) should return false

,结果将是相同的

答案 4 :(得分:0)

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

equals()检查对象的值是否相同

案例1

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

它将检查对象没有分配任何对象引用

案例2

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

equals是一个方法,如果你尝试在空引用上调用它,它会抛出一个NullPointerException,你不能取消引用对象,它不引用任何东西

答案 5 :(得分:0)

如果您使用 Case2

,则可能会出现例外情况

如果folderProcessChecklistBean.getFolderProcessChecklistRecord().getChecklistCode()返回null,则会抛出异常以使用equals

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