首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将.equals()替换为Objects.equals()

将.equals()替换为Objects.equals()
EN

Stack Overflow用户
提问于 2018-09-20 15:26:03
回答 3查看 3.8K关注 0票数 10

我正在编写代码时,IntelliJ建议我更正:

代码语言:javascript
复制
objectOne.equals(objectTwo);

告诉我方法调用equals可能会产生好的旧java.lang.NullPointerException,提出一些我不知道的解决方案,Objects.equals

代码语言:javascript
复制
Objects.equals(objectOne, objectTwo);

阅读文档我只看到一个潜在的问题,如果是objectOne == nullobjectTwo == null,那么结果就是true

此时的问题是:--我可以开始在任何地方替换和使用这个方法--而不是.equals吗?这是一个安全的方法,还是我错过了一些大禁忌?

摆脱NPE是很有吸引力的..。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-20 15:33:13

这个问题没有防弹的答案,因为它取决于程序的需要和它应该如何回答这个特殊的情况。说到这里,我想说:

如果拥有null是程序员的错误(我指的是在算法中永远不会发生的事情),我建议离开.equals方法,因为空指针异常会出现,并使您注意到这个问题,我的意思是,程序员的错误(我们不想要的错误!,这意味着我们编写了糟糕的算法),您应该感谢应用程序报告它(而不是愤怒的真实客户端.)

但另一方面,如果您的应用程序也可以工作,而不是将其视为程序员错误,那么使用Object.equals将更适合您的需要。

普遍的观点认为,例外情况至少应该记录在案。

摘要

试着调查不同类型的例外情况。并不是所有的例外都是程序员错误。

在Java中,通常情况下,选中的异常适用于所有您可以预料到的事件,您可以编写能够处理的代码。而未检查的异常(属于RuntimeException家族的异常)是针对您无法预料的事件(比如空指针异常),因此不可能编写代码来处理您不期望的事情(相反,您应该更正已经存在的代码,而不是编写新代码!)。

票数 8
EN

Stack Overflow用户

发布于 2018-09-20 15:32:44

如果您希望允许空值,则这是一种适当的方法。否则,您只需添加一个空值检查并适当地处理它们。

票数 7
EN

Stack Overflow用户

发布于 2018-09-20 15:45:35

取决于您的代码和“无处不在”的含义。如果您的代码当前假设(可能不是显式的,但仅仅是因为空输入永远不会传播到equals调用之外),则空输入将导致NPE,那么切换到Objects.equals将引入一个bug。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52428516

复制
相关文章

相似问题

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