有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java替换。带有对象的equals()。等于()

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

objectOne.equals(objectTwo);

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

Objects.equals(objectOne, objectTwo);

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

此时的问题是:我是否可以开始替换并在任何地方使用这种方法,而不是.equals? 这是安全的方法还是我错过了一些重要的禁忌症

摆脱NPE非常有吸引力。。。 谢谢


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

  3. # 3 楼答案

    这个问题没有可靠的答案,因为这取决于该项目的需求,以及它应该如何应对这种特殊情况。说到这里,我想说:

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

    但另一方面,如果您的应用程序也可以工作,而不将其视为编程错误,则使用Object。平等会更好地满足你的需求

    一般认为,例外情况至少应该被记录下来

    希望有帮助

    运输署;博士

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

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