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

Java中对象是如何比较的?

岳研
2023-03-14
@see java.lang.System #identityHashCode
public boolean equals(Object obj) {
        return (this == obj);
    }
public static void main(String[] args) {
        Dog rover = new Dog("Rover");
        Dog german = new Dog("Rover2");

        System.out.println("German: " + german + "\tRover: " + rover);
        System.out.println(german.equals(rover));


    }

此外,我重写了hashCode()以:

    @Override
    public final boolean equals(Object obj) {
        if (this == obj)
            return true;
    }

    @Override
    public int hashCode() {
        //The main point of 0 is to check how equals actually work
        return 0;
    }

现在,即使两个对象都是@dog0,print语句也会打印false。想知道为什么控制台:

German: Animal.Dog@0    Rover: Animal.Dog@0
false

共有1个答案

轩辕瑞
2023-03-14

您使用equals作为this==obj比较的“别名”,这是错误的,这就是它不起作用的原因。

对象具有equals方法,因为this==obj只有在实际上是同一对象(内存中的相同引用)时才返回true。

您需要做的是手动比较equals方法中的属性,并且只有当它们匹配时才返回true。

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

  • 我正在尝试创建一个二进制搜索程序,该程序可以使用各种类型的变量(int、float、string等)来查看数组中是否存在元素。我正试图找出如何比较变量。下面是我正在使用的内容的草图: 我甚至不确定使用对象是否是最好的方法。

  • 问题内容: 在java中如何比较两个对象是否相等?何时使用equals和hashcode? 问题答案: 理论(针对语言律师和数学倾向者): (javadoc)必须定义一个等价关系(它必须是自反的,对称的和可传递的)。另外,它必须是一致的(如果未修改对象,则它必须保持返回相同的值)。此外,必须始终返回false。 (javadoc)也必须是一致的(如果未根据修改对象equals(),则它必须保持返回

  • 问题内容: 我有上述2个类(POJO),它们都是绝对相同的(除了课程名称),我将它们添加到两个数组列表:aListA和aListB。我需要比较两个对象是否相同。如果它们相同,则需要将它们添加到另一个列表(commonList)中,如果它们恰好是不同的,则需要将它们添加到另一个列表(differentList)中。我写了以下代码: 我的问题是,即使两个不同POJO中的数据(变量,firstId和se

  • 代码: 输出:(增加空白行以提高可读性) 有两件事我不明白: null 我还查看了date.equals()的实现: 那么,为什么返回false,尽管为两个对象都返回了1406498400000? 参考:http://docs.oracle.com/javase/7/docs/api/java/util/date.html#equals(java.lang.object)

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