簡體   English   中英

哈希碼,等於Java中的合同

[英]Hashcode , equals contract in java

public class VO {

    public int hashcode()
    {
        return 0;
    }
    public boolean equals(Object obj)
    {
        return true;
    }

    public static void main(String args[])
    {
        VO vo1 = new VO();
        VO vo2 = new VO();

        Map<VO,Integer> map = new HashMap<VO, Integer>();

        map.put(vo1, 1);
        map.put(vo2, 1);

        System.out.println(map.size());
    }
}

我得到的輸出是:2

但是據我所知輸出是1。

當我在地圖上放置一個元素時,它將檢查密鑰的哈希碼,如果該哈希碼相同,則它將去檢查是否等於。如果兩種方法返回的結果相同,它將覆蓋先前的值。

在我的情況下,這兩個方法are(hashcode and equals)返回0和true。所以最后在映射中必須有一個元素。但是在這里我得到的大小是2。

可能是什么原因。謝謝...

您沒有覆蓋Object.hashCode ,而是實現了自己的hashcode()方法(請注意大寫的C)。

一個好的做法是在@Override時始終使用@Override批注。 請參閱: 什么時候使用Java的@Override注釋,為什么?

hashcode()帶有小“ c” )僅用作常規方法,而是調用對象類方法hashCode()

public class VO {

    @Override
    public int hashCode() {
        return 0;
    }

    @Override
    public boolean equals(Object obj) {
        return true;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM