当前位置: 首页 > 面试题库 >

`equals`and`hashCode`

子车勇锐
2023-03-14
问题内容

equalsandhashCode方法必须一致,这意味着当两个对象根据equals方法相等时,它们的hashCode方法应返回相同的哈希值。

如果我们不重写hashCode()方法,则Java将返回唯一的哈希码。

class HashValue {

    int x;

    public boolean equals(Object oo) {
        // if(oo instanceof Hashvalue) uncommenting ths gives error.dunno why?
        // :|
        HashValue hh = (HashValue) oo;

        if (this.x == hh.x)
            return true;
        else
            return false;
    }

    HashValue() {
        x = 11;
    }

}

class Hashing {
    public static void main(String args[]) {
        HashValue hv = new HashValue();
        HashValue hv2 = new HashValue();

        System.out.println(hv.hashCode());
        System.out.println(hv2.hashCode());

        if (hv.equals(hv2))
            System.out.println("EQUAL");
        else
            System.out.println("NOT EQUAL");
    }
}

为什么取消注释该行会导致编译错误?

如果对象的哈希码不相等,即使默认哈希码有所不同,为什么它们显示为相等?


问题答案:

平等仅由方法equals()确定。并且hashCode()方法可用于其他情况,例如Map或Set。实际调用equals(以提高效率)之前,它有点像先决条件或提示。因此,假设两个对象相等(即equals()返回true),则它们的hashCodes()必须返回相同的值。

因此,在您的代码中,无论hashCode()做什么,只要覆盖的equals()返回true,就等于2个对象。比较相等性时根本不调用hashCode()。



 类似资料:
  • 比较两个相等的日期。 当且仅当参数不为null并且是一个Date对象时,结果才为真,该对象表示与此对象相同的时间点,以毫秒为单位。 因此,当且仅当getTime方法为两者返回相同的long值时,两个Date对象才相等。 语法 (Syntax) public boolean equals(Object obj) 参数 (Parameters) obj - 要与之比较的对象。 返回值 (Return

  • 该方法确定调用方法的Number对象是否等于作为参数传递的对象。 语法 (Syntax) public boolean equals(Object o) 参数 (Parameters) o - 任何对象。 返回值 (Return Value) 如果参数不为null并且是相同类型且具有相同数值的对象,则方法返回True。 例子 (Example) 以下是此方法的使用示例 - class Examp

  • 描述 (Description) 该方法确定调用方法的Number对象是否等于作为参数传递的对象。 语法 (Syntax) public boolean equals(Object o) 参数 (Parameters) 这是参数的细节 - Any object. 返回值 (Return Value) 如果参数不为null并且是相同类型且具有相同数值的对象,则该方法返回True。 Java API

  • Compare this to another sequence for equality. Signature Sequence.equals = function(other, equalityFn) { /*...*/ } Sequence.equals = function equals(other, equalityFn) { if (!(other instanceof Seque

  • 问题内容: 如果我为一个类实现,是否仍然需要重写该方法?还是会为之工作? 如果答案为 否 ,那么如果出现差异怎么办?比方说,我的方式长期两个对象作为内享有平等的方法是从我的方式长期在同一类的两个对象为内平等不同的。 而且,如果我实施了,是否还必须重写? 问题答案: 虽然建议(并且非常明智)暗示它(反之亦然),但这 不是 必需的。旨在在对一系列对象执行排序时使用,而仅测试直接相等性。 该链接提供了一

  • 问题内容: 输出是 只是对.equals有一个简单的问题。 不管对象内容如何,仅当两个对象引用都指向同一对象时才返回true吗? 编辑 :现在我了解有关的部分,但是为什么2号线和3号线也不会返回? 编辑 :我相信看参考变量的地址,因此s1和s2不能相等。如果我的假设不正确,请纠正我 问题答案: 是,,这意味着两个对象引用不同,结果为false。 对于,您可以使用 为了进行编辑,您要在两个不同的St