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

检查两个对象在Java中是否完全相等

傅宏恺
2023-03-14

我有一个Java类,下面是一个示例

public class Car {

    private int fuelType;
    private Date made;
    private String name;
.
.
. // and so on

共有1个答案

朱啸
2023-03-14

您有几个选项来实现Equals&Hashcode的自动化(选项#3让我大吃一惊!):

  1. 您的IDE。我不建议大多数对象使用这种方法,因为它们可能会随着实际类定义的变化而逐渐过时。它们看起来也很难看,并且用样板代码污染了您的代码库。
  2. Apache Commons提供了一系列使之更容易实现的东西,包括一个反射版本,这样就不会有与类定义过时的风险。除非您需要一个快速的equals/hashcode,否则它比#1更好,但对于我来说,样板还是太多了。
  3. Project Lombok和注释处理。在ya类上删除equalsandhashcode注释并使用它。我推荐使用龙目岛项目。它在构建中增加了一点魔力(但不多),因此需要一个插件来使IDE表现良好,但这是一个很小的代价,因为没有样板代码。Lombok是一个在编译时运行注释处理器,因此不会对运行时性能造成影响。
  4. 使用一种可以直接支持它的语言,但也以JVM为目标。Groovy使用注释,Kotlin支持数据类。除非您现有的代码可以快速转换,否则我会避免这样做。
  5. 谷歌的Auto有一个AutoValue。与Project Lombok一样,这也是一个注释处理器,但它的魔力较小,但代价是略多一些样板(多亏了Louis Wasserman)
 类似资料:
  • 本文向大家介绍检查两个StringBuilder对象在C#中是否相等,包括了检查两个StringBuilder对象在C#中是否相等的使用技巧和注意事项,需要的朋友参考一下 要检查两个StringBuilder对象是否相等,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。

  • 我有一个创建Element类型arraylist的主类: 然后我有一个元素clas: 我想在将一个元素添加到列表(它的id和名称)之前进行检查,以检查列表中已经存在的另一个元素是否已经具有这些精确值(id和名称)。我知道我可以使用toString方法来实现这一点,但我不确定如何在将元素添加到列表之前重写它以传递id和名称。他们是这样做的吗?理想情况下,我只想添加一个元素,如果它还不存在的话。

  • 问题内容: 因此,我听说如果将2个字符串与==进行比较,则只有它们都引用相同的对象/实例时,我才会返回true。那是琴弦。布尔呢? 问题答案: ==是否检查布尔值是否完全相等?-Java 这取决于您是在谈论s(对象包装,请注意大写)还是s(原始,请注意小写)。如果您在谈论s(对象包装器),就像处理所有对象一样,请检查 身份 ,而不是对 等 。如果您在谈论s(基元),它将检查是否相等。 所以: 但

  • 问题内容: 比较两个浮点值以实现完全相等的一种优雅,易读且不冗长的方法是什么? 听起来很简单,但这是一个严重的问题。该运营商没有得到楠所做的工作,也有特殊待遇的零: 但我想,以确定是否两个值是完全一样的(但我 不 关心不同的NaN模式,所以任何的NaN ==任何其他男- >真)。 我 可以 使用这段丑陋的Monster代码 来 做到这一点: 有没有更好的方法来编写此代码(并使意图显而易见)? 问题

  • 问题内容: 为什么… 在给定…的情况下导致编译时出现不兼容的类型错误 … 才不是? 为什么我可以比较String和Object的对象引用,而不比较StringBuilder和String的对象引用?它们不是都只是指向存储位置吗? 谢谢 问题答案: 根据Java语言规范(15.21.3): 如果无法通过强制转换将任何一个操作数的类型转换为另一个操作数的类型,则将发生编译时错误(第5.5节)。两个操作