首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果equals(null)抛出NullPointerException,这是个坏主意吗?

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

Stack Overflow用户
提问于 2010-05-22 18:45:50
回答 12查看 56.1K关注 0票数 77

null相关的equals合同如下:

对于任何非空的引用值xx.equals(null)应为return false

这是相当奇怪的,因为如果使用o1 != nullo2 == null,那么我们有:

代码语言:javascript
运行
复制
o1.equals(o2) // returns false
o2.equals(o1) // throws NullPointerException

事实上,o2.equals(o1) throws NullPointerException是一件好事,因为它提醒我们程序员的错误。然而,如果由于各种原因我们只是将它切换到o1.equals(o2),那么这个错误就不会被捕捉到,相反,它只会“静默地失败”。

所以问题是:

  • 为什么不抛出NullPointerException
  • Would而抛出return false是个好主意?如果我们尽可能地重写契约,让anyObject.equals(null)总是抛出NullPointerException,那就不是个好主意了?

Comparable的比较

相比之下,Comparable contract是这样说的:

请注意,null不是任何类的实例,e.compareTo(null)应该抛出NullPointerException,即使e.equals(null)返回false

如果NullPointerException适用于compareTo,为什么不适用于equals

相关问题

纯粹的语义论证

以下是Object.equals(Object obj)文档中的实际单词:

表示其他某个对象是否“等于”这个对象。

什么是对象?

JLS 4.3.1 Objects

对象是一个类实例或数组。

引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的null引用,它不引用任何对象。

从这个角度来看,我的论点非常简单。

  • equals测试某个其他对象是否“等于”this
  • null引用没有给出其他对象,因为test
  • Therefore,equals(null)应该抛出NullPointerException
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2887761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档