我有以下两种情况。
案例1:
if( folderProcessChecklistBean.getFolderProcessChecklistRecord()
.getChecklistCode() != null)
案例2:
if(!folderProcessChecklistBean.getFolderProcessChecklistRecord()
.getChecklistCode().equals(null))
有人可以告诉我两种方法是否相同?
答案 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){...}