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

如何比较类对象?[副本]

澹台阳秋
2023-03-14

我想比较两个物体。然而,当我运行它时,它告诉我它们不匹配,尽管它们匹配。请让我知道我做错了什么,谢谢。下面是我的代码:

      Player p1 = new Player("Mo", "Food", 200.0,0.0);
      Player p2 = new Player("Mo", "Food", 200.0,0.0);
      
      System.out.println(p1.equals(p2)); // -- false

共有1个答案

庄子平
2023-03-14

您的equals()正在调用默认的对象类的方法,该方法比较对象的标识*,即p1==p2,而不是其内容。这是来自对象的默认equals:

public boolean equals(Object obj) {
    return (this == obj);
}

如果要定义逻辑以确定两个播放器是否相等,则需要重写:

  • equals()方法
  • hashcode()实现equals-hash协定的方法
class Player {
    private String firstName;
    private String lastName;
    private double score;
    private double rating;

    // ...

    @Override
    public int hashCode() {
        return Objects.hash(firstName, lastName, score, rating);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null || getClass() != obj.getClass())
            return false;
        Player other = (Player) obj;
        return Objects.equals(firstName, other.firstName) && Objects.equals(lastName, other.lastName)
                && score == other.score && rating == other.rating;
    }

    // ...
}
record Point(String firstName, String lastName, double score, double rating) { }
    null
class Player implements Comparable<Player> 
{
   @Override
   public int compareTo(Player p2)  
   {
      /* Allows returning : (0)-> this==p2 | (1)-> this>p2 | (-1)-> this<p2
        Anyway, the meaning of 1 and -1 is up to you.
        if (this.name.equals(p2.name) && ...)
           return 0;
       else if ... 
            return 1;
       return -1;     */
   }
} 
 类似资料:
  • 问题内容: 我必须将对象与预定义类的列表进行比较。 使用安全还是应该使用? 注意: 我不能使用,我没有对象,我只有对象。在这种情况下,我会像枚举一样使用它! 问题答案: 不会覆盖来自的方法,该方法是这样实现的: 因此与(除非为null)相同。

  • 本文向大家介绍js对象如何深比较?相关面试题,主要包含被问及js对象如何深比较?时的应答技巧和注意事项,需要的朋友参考一下 之前其实没听说过,但是刚刚搜索到了 我还是不复制粘贴了 原文地址

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

  • 问题内容: 基本上我想这样做: 我试过了: 而且没有用。 另外,其他类型呢?例如,我无法复制。 问题答案: 就您而言,将返回。 您可能还需要阅读以下内容:http : //www.canonical.org/~kragen/isinstance/

  • 问题内容: 我有两个从同一类实例化的java对象。 如果我将它们的两个属性都设置为完全相同的值,然后验证它们是否相同 但是,这些方法都不返回真实值。我已经检查了每个属性,并且它们匹配。 如何比较这两个对象以验证它们是否相同? 问题答案: 你需要提供自己的实现。 如果哈希表中有可能使用你的对象,则还应该重写。一个合理的实施将是该对象的字段的哈希码喜欢的东西结合起来:

  • 问题内容: 我需要编写一个比较器,它采用类型A的对象A和类型B的对象B。这两个对象不是公共对象的扩展。它们的确不同,但是我需要通过其中的通用字段来比较这两个对象。我必须使用比较器接口,因为对象存储在Set中,并且在必须对CollectionUtils执行操作之后。我在Google上搜索了一下,发现了Comparator的解决方案,但只有相同的类型。 我试图朝这个方向实施思考,但是我不知道我是否在正