我採取二叉樹和我遇到的代碼來這樣爲什麼.equals(null)不起作用,== null的作品?
if(head.equals(null)) return;
它給了我空指針錯誤,而如果我做它的其他方式
if(head == null) return;
它工作得很好。 請告訴我爲什麼會發生這種情況? 如果有人已經問過,我真的很抱歉。我搜索了但沒有找到與此說明相匹配的任何問題。
我採取二叉樹和我遇到的代碼來這樣爲什麼.equals(null)不起作用,== null的作品?
if(head.equals(null)) return;
它給了我空指針錯誤,而如果我做它的其他方式
if(head == null) return;
它工作得很好。 請告訴我爲什麼會發生這種情況? 如果有人已經問過,我真的很抱歉。我搜索了但沒有找到與此說明相匹配的任何問題。
因爲equals
是一種方法,所以它需要一個被調用的對象。如果head
是null
,那麼沒有對象。
另外值得注意的是,Object.equals的契約明確指出o.equals(null)應爲false:http://docs.oracle。 com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object) – yshavit 2013-03-03 21:23:36
我在對象本身上調用它。 rightNode.equals(null) – 2013-03-04 05:37:00
@ADi Nope。 'rightNode'是*不是一個對象*,它是一個變量。如果該變量恰好指向現有對象,則可以調用該對象的「equals」方法。否則,(如果變量的值爲空,意味着它指向沒有對象),那麼沒有對象調用該方法。別擔心,你會得到它:) – Boann 2013-03-05 22:08:39
如果你可以調用equals方法,那麼你的對象不是null。 – 2013-03-04 08:42:20
請努力嘗試理解底層結構和機制。如果head爲null,則通過調用其任何方法來獲得NullPointerException ... – ppeterka 2013-03-04 09:39:52