兩個對象值相同(x.equals(y) == true),但卻可有不同的hashcode,這句話對不對?


也對,也不對。

如果此對象重寫了equals方法,那么可能出現這兩個對象的equals相同,而hashcode不同。

如果此對象繼承Object,沒有重寫equals方法,那么就使用Object的equals方法,Object對象的equals方法默認是用==實現的,那么如果equals相同,hashcode一定相同。

 

Object 的equals方法:

==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。

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

String 重寫了equals方法:

只要兩個引用所指向的對象是兩塊含有一樣字樣的字符串的話,那么就返回true

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM