最近看到一個例子,講的是“equals”和“==”的區別,我們來先看一下例子:
public class equal { public static void main(String[] args){ String str1 = new String("qwer"); String str2 = new String("qwer"); String str3 = str1; if(str1==str2){ System.out.println("對"); } else { System.out.println("錯"); } if(str1==str3){ System.out.println("對"); } else { System.out.println("錯"); } if(str1.equals(str3)){ System.out.println("對"); } else { System.out.println("錯"); } } }
上面這段代碼最后輸出的結果是:
錯
對
對
對於這個,我來談談我的理解。
1,在第一個if處,“if(str1==str2)”如果成立則輸出“對”但是結果輸出的是“錯”,那么說明str1!=str2.但是回頭看代碼中,對於str1和str2的賦值都為“qwer”,那為什么還不想等呢。我記得當時在學創建新對象的時候,使用的是關鍵詞new。當時講的是new就是在存儲器中新建一個空間,然后把賦值放進去。這里既然str1和str2都是新建的,那么說明他們不在同一個空間。也就是不是相同的對象,只不過這兩個對象的值相同罷了。就相當於兩個人叫了同樣的名字而已。
2,引用類型變量中,運算符“==”比較的是兩個變量是否引用同一對象。所以,當判斷str1==str3的時候,會得出“錯”“對”。
3,再往下看“if(str1==str3)”,得出的是“對”,這就說明str1和str3是相等的。因為在創建str3的時候,給其賦的對象就是str1,說一str3和str1引用的是同一對象,故他們之間是“==”關系。
4,繼續往下看到“if(str1.equals(str3))”,結果輸出“對”,說明“str1.equals(str3)”是成立的,因為str1和str3引用變量對象的值都是"qwer",所以結果是成立的。如果程序后面再加上一句“if(str2.equals(str3){system.out.println("對");}else{system.out.println("錯");}的話,我想輸出的結果還會是“對”。因為str2和str3引用的對象的值都是“qwer”。
總結:
1,引用類型變量中,運算符“==”比較的是兩個變量是否引用同一對象。如果要比較兩個引用變量是否指向同一對象,則使用“==”來進行比較;
2,如果要比較兩個引用變量對象的值是否相等,則要用對象的equals()方法進行比較;
3,如果要比較兩個數值是否相等,那么必須用“==”來比較!