Apache Commons ObjectUtils equals equals方法测试了什么样的平等?
我一直认为Java中有两种类型的平等,
-
值相等 :使用该方法来测试两个对象在非空对象引用上实现等价关系。
.equals()
-
引用相等:使用运算符来测试两个基元类型或内存位置是否相等。
==
以下页面更详细地介绍了这些语言基础知识。
- 维基教科书 Java 编程 : Java 编程/比较对象
- xyzws Java EE FAQ : 相等运算符和等于方法有什么区别?
- Java Platform API : Javadoc for Object.equals()
- Java 语言规范 : 相等运算符
这些链接中没有明确指定的是,如果比较两个对象引用的值相等性,应该发生什么情况。隐含的假设是应该抛出 a,但这不是 ObjectUtils.equals() 方法所执行的操作,该方法可能被认为是最佳实践实用工具方法。null
NullPointerException
令我担心的是,Apache Commons似乎已经有效地在后门将第三种平等措施引入Java,并且已经令人困惑的状况可能变得更加复杂。我称之为第三种平等度量,因为它试图测试价值相等性,当它失败时,它会回退到测试参考相等性。Apache Commons相等性测试与值相等性和参考相等性有许多相似之处,但也明显不同。
我担心并希望尽可能避免使用吗?ObjectUtils.equals()
是否有论据可以声称这为其他两种平等措施提供了有用的结合?ObjectUtils.equals()
选择的答案
在这个问题上似乎没有达成共识的意见,但我决定将Bozho标记为正确,因为他最好地引起我的注意,我现在认为是零安全等于检查的最大问题。我们都应该编写快速失败的代码,以解决为什么比较两个空对象以实现值相等的根本原因,而不是试图将问题扫地出门。