Java初學者瞭解"=="與equals的區別
這篇文章主要介紹了Java初學者瞭解"=="與equals的區別,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
1.基本資料型別當中,"=="比較的是兩個變數的值
int a=5; int b=4; int c=5; System.out.println(a==b);//false System.out.println(a==c);//true
2.引用資料型別當中,"=="比較的是兩個物件在記憶體裡是不是同一個物件,就是說在記憶體裡的儲存位置(地址,引用)是否一致。(這裡拿String舉例)
String str1 = new String("Hello"); String str2 = new String("Hello"); String str3 = new String("World"); System.out.println(str1 == str2);// false,new出來的物件在堆當中,屬於兩個物件 System.out.println(str1 == str3);// false,同上
3.兩個String物件的儲存值是一樣的,但有可能在記憶體裡儲存在不同的地方。
String str1="Hello"; String str2="Hello"; String str3 = new String("Hello"); //對String物件進行==比較 System.out.println(str1==str2);//true,str1和str2在方法區的常量池當中,屬於同一個引用 System.out.println(str1==str3);//false,str3在堆當中,與str1儲存位置不一致 System.out.println(str2==str3);//false,同上
4."=="比較的是引用(記憶體裡的儲存位置),而String類中equals()方法比較的是字串的內容。
String str1="Hello"; String str2="Hello"; String str3="World"; String str4 = new String("Hello"); String str5 = new String("World"); System.out.println(str1.equals(str2));//true,內容相同 System.out.println(str1.equals(str3));//false,內容不同 System.out.println(str1.equals(str4));//true,內容相同 System.out.println(str1.equals(str5));//false,內容不同
5.public boolean equals(Object obj)這個方法是由Object物件提供的,可以由子類進行重寫。
預設的實現只有當物件和自身進行比較時才會返回true,這個時候和"=="是等價的。下面是Object類下的equals()方法:
public boolean equals(Object obj) { return (this == obj); }
而String類繼承至Object類,對equals()方法進行了方法重寫,下面是String類下的equals方法():
public boolean equals(Object anObject) { if (this == anObject) { return true;//同一個引用,說明是同一物件,字元序列內容一定相同 } if (anObject instanceof String) {//判斷是不是String物件 String anotherString = (String) anObject;//下轉型,轉換為String字串 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; }
另外,String,BitSet,Date,和File都對equals方法進行了重寫,對兩個String物件而言,值相等意味著它們包含同樣的字元序列,對於基本型別的包裝類來說;值相等意味著對應的基本型別的值一樣。
7.總結:
(1)."=="如果比較的是物件是基本資料型別,則比較的是值是否相等;"=="如果比較的物件是引用資料型別,則比較的是引用,即比較在記憶體當中的儲存位置(地址)是否相同,也可以理解為是否是同一個物件(a is a)。
(2).equals()方法預設比較的是是否為同一物件(子類沒有重寫父類equals方法),String類的equals()方法比較的是內容(該類對equals()方法進行了重寫,即a like a)是否相同,自定義類也可重寫equals()方法,這裡不在贅述。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。