当我们让2个对象的hashcode指向一个地址时,为什么它是临时的?

When we make hashcode of 2 objects to point to one address,why it is temporary?

这里Equals_to_operator是一个Class并且有一个参数化的构造函数public Equals_to_operator(int dd, int mm, int yy)ef 是两个对象,它们使用相同的参数调用参数化构造函数。 我已经覆盖了 hashCode 并使两个对象的 hashCode 相同。 尽管使哈希码相同(对象的内存位置相同),但它给出 Output:not 等于

我想通过使哈希码相同来执行相同的操作,我哪里出错了?

   public class Equals_to_operator {
    private int dd,mm,yy;

    public Equals_to_operator(int dd, int mm, int yy) {

        this.dd = dd;
        this.mm = mm;
        this.yy = yy;
    }
    @Override
    public String toString() {
        return "Equals_to_operator [dd=" + dd + ", mm=" + mm + ", yy=" + yy + "]";
    }
    public int hashCode() {
        return 1;

    }
    public static void main(String[] args) {
        Equals_to_operator e=new Equals_to_operator(7, 1, 2016);
        System.out.println(e+"\n"+e.hashCode());
        Equals_to_operator f=new Equals_to_operator(7, 1, 2016);
        System.out.println(f+"\n"+f.hashCode());
        if (e==f)
            System.out.println("equals");
        else
            System.out.println("not equals");
    }
== // checks equality in terms of memory address
something.equals(somethingElse) // enforces your own terms of what "equals" is if. If you wish to do this, override "equals()"
hashCode() // used when you're trying to use a collection such as a hashmap to map a key object to a value

您可能应该查看这些项目的文档,但您确实需要了解 == 和 .equals() 之间的区别。

编辑:旁注:如果当你更深入地研究 hashCode() 时,你在某处读到默认情况下对象的 toString() 表示(没有覆盖 toString())是一种内存形式地址,这是一个常见的误解。它实际上是 hashCode-- 但我离题了。

您似乎对 equalshashCode 的交互方式存在根本性的误解。这两种方法协同工作,不能相互替代。此外,您似乎误解了这两种方法与运算符 == 交互的方式:它们没有;运算符 == 检查对象身份,因此在您的程序中它会 return false 即使您正确地覆盖 hashCodeequals.

您必须始终成对重写这两个方法,并调用 equals 来检查相等性。

返回相同的散列码告诉基于散列的容器您的对象可能相等,从而触发对equals的额外调用; return 不同的哈希码允许哈希容器跳过对 equals.

的调用

必读: hashCode and equals 的文档。

Eventhough making the hashcode same(memory location of object same) it gives Output:not equals

具有相同的哈希码并不意味着对象是相等的。

memory location of object same ... 这不是哈希码的作用。你从哪里得到的?

if (e==f)

这意味着如果 ef 都指向同一个对象,则条件为真。

根据您的 equals 方法,ef 指向的对象都相等,但 == 但检查引用相等性而不是内容。