【发布时间】:2016-09-02 10:40:30
【问题描述】:
我刚刚违反了 PMD 中的 CompareObjectsWithEquals 规则,因为我使用 '==' 而不是 equals() 比较了两个对象引用,但我很难理解为什么这是一个问题并且不能找不到此限制的任何理由。
我很欣赏 Object.equals() 比较引用并因此具有相同的效果,但我没有使用原始对象,因此我不能保证该方法不会在层次结构中的某个位置被覆盖.
我想做一个参考比较,我想确保这始终是一个参考比较。为什么 PMD 会试图强迫我调用 equals()?
只是我一个人,还是这是一个非常愚蠢的规则??
已编辑:
为了清楚起见——我不是在问== 和equals() 之间有什么区别(根据What is the difference between == vs equals() in Java?)——我完全理解这一点。我在问为什么 PMD 会强迫我总是使用 equals() 当调用者可能合法地想要确保执行参考比较时。
【问题讨论】:
-
如果我直接回答你的问题,我会被标记为
rude/offensive:/ -
@Tunaki - 你能解释一下这是怎么重复的吗?我理解 == 和 equals() 之间的区别 - 我想我已经在我的问题中说清楚了?我的问题是关于 PMD 规则似乎试图阻止我使用 '==' 的原因,而在我看来,这样做通常是完全合法的。
-
@xenteros 如果你被我的问题冒犯了,我很抱歉。您是否可以给我一个低调的回复版本,并解释您对此有问题的原因?
-
您永远不应该将对象与
==进行比较,而是将其与equals进行比较,这就是警告告诉您的内容。链接问题中解释了这两种方式的区别和解释。 -
链接问题的原因是因此您将测试对象相等性而不是功能相等性。确实,将 Objects 与
==进行比较通常是一个错误。这很可能是 PMD 规则存在的原因 (see this question)。要禁用警告,请检查this question。