Java學習筆記之五——關於"equals"和“==”的區別


最近看到一個例子,講的是“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,如果要比較兩個數值是否相等,那么必須用“==”來比較!

 


免責聲明!

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



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