java基礎:==、equals()和hashcode()

1、區別java

==比較的是對象的地址,在不重寫equals()和hashcode()的狀況下,equals()和hashcode()比較的也是地址。可是在重寫equals()和hashcode()後,equals()和hashcode()就能夠比較內容:code

public static void main(String[] args) {
        User user1 = new User(1, "A", 22);
        User user2 = new User(1, "A", 22);
        System.out.println("==:" + (user1 == user2));
        System.out.println("equals():" + user1.equals(user2));
        System.out.println("user1的hashcode:" + user1.hashCode());
        System.out.println("user2的hashcode:" + user2.hashCode());
    }

運行結果:對象

==:false
equals():true
user1的hashcode:509445
user2的hashcode:509445

2、注意的點同步

一、若是須要自定義equals()方法,則重寫equals(),爲遵照契約,需同步重寫hashcode();hash

二、對於String的幾個類型,equals()和hashcode()已經重寫因此能夠用equals()對內容做對比class

3、提出的問題方法

一、equals()爲true是否保證hashcode()必定一致?static

對於按照契約重寫equals()和hashcode()的狀況下,equals()爲true能保證hashcode()一致co

二、hashcode()一致是否保證equals()爲true?new

不能,會出現哈希碰撞的狀況

相關文章
相關標籤/搜索