Java筆試面試(==和equals)

/*
 * 以下輸出內容是什麼
 */
public class Test {
	public static void main(String[] args) {
		String str = new String("abc");
		String str2 = new String("abc");
		
		System.out.println(str == str2);//false
		System.out.println(str.equals(str2));//true 
		
 		Object obj = new Object();
 		Object obj2 = new Object();
		
  		System.out.println(obj == obj2);//false
 		System.out.println(obj.equals(obj2));//false
 	}
}

默認情況下,==和equals都是比較的內存地址,但是String類重寫的equals方法,如果內容相同則equals返回true

在往Set中添加對象元素時,首先會調用該對象的hashCode方法,根據其hashCode值計算出在內存中的位置,如果該位置上沒有其他對象,則直接添加到集合中,如果發現有其他的對象,則調用兩者的equals方法進行比較。如果equals返回true,說明與該位置上的對象相同,後者不會被加到集合中,如果equals返回false,說明與該位置上的對象不相同,則在進行一次散列,計算出內存位置重複上述判斷過程。對於Map中的key,原理也和上述一致。

發佈了84 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章