相关疑难解决方法(0)

如果equals(null)抛出NullPointerException,这是一个坏主意吗?

合同equals与问候null,如下所示:

对于任何非空引用值x,x.equals(null)应该return false.

这是相当奇特的,因为如果o1 != nullo2 == 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

相关问题


一个纯粹的语义论证

这些是Object.equals(Object …

java null equals nullpointerexception

75
推荐指数
3
解决办法
5万
查看次数

标签 统计

equals ×1

java ×1

null ×1

nullpointerexception ×1