合同equals与问候null,如下所示:
对于任何非空引用值
x,x.equals(null)应该return false.
这是相当奇特的,因为如果o1 != null和o2 == null,那么我们有:
o1.equals(o2) // returns false
o2.equals(o1) // throws NullPointerException
Run Code Online (Sandbox Code Playgroud)
这o2.equals(o1) throws NullPointerException是一件好事,因为它提醒我们程序员错误.然而,如果出于各种原因我们只是将其切换到了那个错误就不会被捕获o1.equals(o2),而这只会"默默地失败".
所以问题是:
o1.equals(o2)不应该return false投掷而不是一个好主意NullPointerException?anyObject.equals(null)总是扔掉,那会NullPointerException不是一个坏主意?Comparable相反,这就是Comparable合同所说的:
请注意,这
null不是任何类的实例,并且e.compareTo(null)应该抛出一个NullPointerException偶数e.equals(null)返回false.
如果NullPointerException适合compareTo,为什么不适合equals?