【Java】:Java當中為什么不能夠直接用==比較String字符串


因為在java當中比較字符串String實際上比較的是字符串之間的地址,這一點比較奇怪,而比較數字則是貨真價實的比較數字的大小。因此我們為了判斷兩個字符串是否是一樣的可以使用:

str.equals(str2)

來進行判斷,str是一個字符串,str2是用來比較的字符串。我們在Python當中直接比較就可以了,希望Java也能做出相應的優化。

但是這是為什么呢?因為在Java當中具有兩種大的數據類型,一種是引用類型,一種是基本類型。

 

1.對基本類型而言,使用==進行比較,是直接比較兩個數據類型之間的數值

2.對於引用類型而言,使用==進行比較,是比較的兩個數據類型之間的地址

 

一般情況下String字符串和數組都不是基本數據類型,它們被當作類來處理,也就是我們所說的引用數據類型,因此我們比較字符串的時候,需要使用str.equals(str2)而不是直接使用==進行比較。我們來看一段程序:

        //下面我們來了解字符串的常量池
        String str="gre";
        String str2="gre";
        char[] chars={'g','r','e'};

        String arraychar=new String(chars);
        System.out.println(str==str2);//true
        System.out.println(str==arraychar);//false
        System.out.println(str2==arraychar);//false

對於前面兩個定義str和str2而言,str和str2當中所保存字符由於是相同的,因此jvm為了節約內存,就讓這個字母在內存當中的地址是相同的,在java當中字符串是不可修改的緣故,因此str和str2指向的是同一個內存空間,在這個內存空間當中我們爆保存的是gre這三個單詞的ASCii碼,which are 97,98,99。而對於使用char所創建的string而言,我們開啟了一個新的內存空間,因為在內存當中我們保存的是char型字符,which are 'g','r','e',在內存當中保存的東西不一樣了,因此地址也就不一樣了。我們用於比較的時候字符串又是引用類型,因此最后比較的是地址,地址不一樣就會輸出false,這也是會最終呈持續的后面兩行會輸出false的緣故。


免責聲明!

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



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