为什么.equals(null)不起作用且== null有效?

Adi*_*ave -5 java null return equals nullpointerexception

我正在实现二叉树,我遇到了这样的代码

if(head.equals(null)) return;
Run Code Online (Sandbox Code Playgroud)

它给了我空指针错误,而如果我用另一种方式

if(head == null) return;
Run Code Online (Sandbox Code Playgroud)

它工作得很好.请告诉我为什么会这样?如果有人已经问过我,我真的很抱歉.我搜索但未找到符合此描述的任何问题.

Oli*_*rth 24

因为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中) (8认同)
  • @ADi不.`rightNode`是*不是对象*,它是一个变量.如果该变量当前指向现有对象,则可以调用该对象的`equals`方法.否则,(如果变量的值为null,表示它指向无对象),则没有对象可以调用该方法.别担心,你会得到它:) (2认同)