为了账号安全,请及时绑定邮箱和手机立即绑定

用 Objects.equals() 替换 .equals()

用 Objects.equals() 替换 .equals()

BIG阳 2021-09-29 17:42:05
当 IntelliJ 建议我更正以下内容时,我正在编写代码:objectOne.equals(objectTwo);告诉我 Method 调用equals可能会产生旧的java.lang.NullPointerException,提出一些我不知道的解决方案,Objects.equals:Objects.equals(objectOne, objectTwo);阅读文档我只看到一个潜在的问题,即如果objectOne == null和objectTwo == null,那么结果是true。在这一点上的问题是:我可以开始替换并在任何地方使用这种方法而不是.equals吗?这是一种安全的方法还是我遗漏了一些大的禁忌症?摆脱 NPE 非常有吸引力……谢谢
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

这个问题没有万无一失的答案,因为它取决于程序的需求以及它应该如何回答这种特殊情况。说到这里,我会说:

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

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

一般的智慧建议异常应该至少被记录下来。

希望能帮助到你!

TD;DR;

尝试调查不同类型的异常。并非所有例外都是程序员错误。

在 java 中,通常,检查异常是针对所有您可以预期的事件,您可以编写应该能够处理的代码。而unchecked异常(那些所属的RuntimeException的家庭)的事件,你只是无法预料(如空指针异常),因此它是IMPOSIBLE来编写代码来处理事情,你不要指望(相反,你应该纠正已经存在的代码,不要写新的!)



查看完整回答
反对 回复 2021-09-29
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-09-29
?
暮色呼如

TA贡献1853条经验 获得超9个赞

取决于您的代码以及“无处不在”的含义。如果您的代码当前假定(可能不是明确的,但只是因为空输入永远不会传播到equals调用之外)空输入将导致 NPE,那么切换到Objects.equals将引入一个错误。


查看完整回答
反对 回复 2021-09-29
  • 3 回答
  • 0 关注
  • 311 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信