在Java中,使用“==”一般比較的是兩個變數的地址,也就是說這兩個變數是在同一個記憶體單元儲存,他們的結果才會相等,對於兩個字串String a = "1234"; String b = "1234";對於這兩個變數a和b,當時用“==”和使用a.equals(b)的時候,他們的結果都是相等的,因為a和b兩個字串後是兩個字串常量,他們在記憶體中的儲存是在同一個地方,所以使用“==”和a.equals(b)兩個結果都是相等的;
但是對於String a = new String("1234); String b = new String("1234");雖然a和b的結果都是“1234”,但是使用“==”進行判斷的時候,得到的結果卻是不相等的,因為此時的a和b是兩個物件,他們所存在的記憶體位置不相等,所以“==”他的判斷也就是不相等的了,此時使用a.equals(b)得到的結果就是正確的;
對於比較,在我們的第一反應中就是第一個與第二個是否相等,在Java開發語言中,我們經常是使用雙等號“==”來進行兩個變數的判斷,比如3==3為正確(true),但是在Java中使用“==”進行字串判斷的時候,有時候兩個變數明明都是一模一樣的,但是他的結果卻一直是不相等(false),所以對於新手開發者來說,經常會感到迷惑。通常在我們開發的時候,經常使用的比較方法為a.equals(b)來進行判斷兩個字串是否相等。
在Java中,使用“==”一般比較的是兩個變數的地址,也就是說這兩個變數是在同一個記憶體單元儲存,他們的結果才會相等,對於兩個字串String a = "1234"; String b = "1234";對於這兩個變數a和b,當時用“==”和使用a.equals(b)的時候,他們的結果都是相等的,因為a和b兩個字串後是兩個字串常量,他們在記憶體中的儲存是在同一個地方,所以使用“==”和a.equals(b)兩個結果都是相等的;
但是對於String a = new String("1234); String b = new String("1234");雖然a和b的結果都是“1234”,但是使用“==”進行判斷的時候,得到的結果卻是不相等的,因為此時的a和b是兩個物件,他們所存在的記憶體位置不相等,所以“==”他的判斷也就是不相等的了,此時使用a.equals(b)得到的結果就是正確的;
之所以使用a.equals(b)的結果是判斷出兩個字串一樣,是因為String類重寫了equal()的方法,他的比較方法是迴圈遍歷兩個字串中的每個字元,只有當兩個字串中每個位置上的字元都一樣的時候,這個方法返回的值才會是相等(true);
因此在我們開發過程中,遇到字串的比較,使用字串的equals()的方法進行判斷,這樣會減少很多的bug;同樣不僅僅對於字串的比較,對於任何兩個物件的比較,我們都可以使用equal()方法;
看完上面的內容,你瞭解Java字串比較了嗎?