当前位置: 首页 > 知识库问答 >
问题:

将对象与Quals PMD规则进行比较的目的

罗学林
2023-03-14

我刚刚违反了PMD中的CompareObject和Quals规则,因为我用“==”而不是equals()比较了两个对象引用,但我很难理解为什么这是一个问题,也找不到任何理由来解释这个限制。

我很欣赏这个东西。equals()比较引用,因此具有相同的效果,但我没有使用原始对象,因此我不能保证该方法不会在层次结构中的某个位置被重写。

我想做一个参考比较,我想确保这总是一个参考比较。为什么PMD要强迫我打电话给Equals()?

是只有我,还是这是一个非常愚蠢的规则??

编辑:只是想澄清一下——我不是在问==equals()之间有什么区别(根据Java中==vs equals()的区别是什么?)-我完全理解这一点。我想问的是,当调用方可能合理地希望确保执行引用比较时,为什么PMD会强迫我始终使用equals()

共有2个答案

钱澄邈
2023-03-14

@YMomb的新增内容:

PMD和那些静态分析工具总是将最终决定权留给用户。如果你认为你的设计是正确的,你完全有权忽略任何规则。

谢骏奇
2023-03-14

在您的情况下,您知道自己在做什么,需要比较引用,以确保规则不适用。你必须使用==

但大多数情况下,这是新Java开发人员的错误,他们试图使用==而不是. equals()来比较对象的值。

 类似资料:
  • 我创建了一个,当调用变量为ISE时,它会读取相关数据的表。但是,如果我尝试将与另一个对象进行比较,无法正确读取。我想告诉脚本,如果现有CSV中的任何行与匹配,则不会将数据导出到CSV,换句话说,跳过CSV文件中的重复行。CSV可能有也可能没有多行。

  • 我有一个类赋值,我需要将一个目标排序到一个二叉树节点中,给定一个根,我需要将它与根进行比较,如果目标小于根的值,则将目标作为左子,或者如果目标大于根的值,则将目标作为右子。 我必须使用给定的方法头和参数,我的代码是这样编写的: 返回以下错误: java:109:错误:二进制运算符“<”的操作数类型不正确 我还尝试了compareTo方法,通过尝试类似于 返回以下错误: binarySearchTr

  • 问题内容: 当我测试此代码时: 我期待一个真实,真实,真实,错误。因为这: 在java.sql.Timestamp的javadoc中,它指出: 注意:此类型是java.util.Date和单独的纳秒值的组合。仅整数秒存储在java.util.Date组件中。小数秒-纳米- 是分开的。传递值java.util.Date类型的值时,Timestamp.equals(Object)方法从不返回true,

  • 问题内容: 我得到的错误就在这行 。 该怎么办?其他逻辑还可以吗? 我想做的是有一个A列表和一个B列表,其中一个属性与id相同;尽管变量名不同。即在和在B。现在我将两个列表都放在ListAll中,并在相同的变量id / bid上对它们进行排序。我有A和B实现可比性。 和我的listAll是对象类型? 我该怎么做?谢谢。 问题答案: 您可以添加一个通用基类并在那里进行比较,如下所示:

  • 问题内容: 我想比较两个字符串在Java中的相等性(如果一个或两个都可以),因此我不能简单地调用。什么是最好的方法? 编辑: 问题答案: 这是Java内部代码(在其他方法上)使用的:

  • 请原谅我在这里缺乏理解,因为我已经进入了三天的冬眠期。 我正在尝试在一个实体上添加验证,这需要将它们与另一个实体进行比较。 例如,以一个人为例。一个人可以有许多身体部位,但最多有两个手臂类型的身体部位(变异除外)。为了验证这一点,在插入新的车身部件时,我需要将其与给定人员的其他车身部件进行比较,并验证该类型的最大值是否已经达到。 我一直在研究Hibernate提供的约束/验证内容,但似乎没有一个涵