Java中判斷字符串是否相等的實現

在最近的開發中,我踩到一個坑,過程是這樣的。我需要在Java中判斷兩個字符串是否相等,按照以往的經歷使用 == 雙等號的操作符來判斷,但是在Java中,這樣寫卻沒有實現我想要的效果。經過查閱資料後,把得到的經驗分享給大傢。

相等判斷操作符==

Java中,==相等判斷符用於判斷基本數據類型和引用數據類型。 當判斷基本數據類型的時候判斷的是數值,當判斷引用數據類型時判斷變量是否指向同一引用對象。

使用==判斷字符串時,判斷的是兩個字符串是否指向同一個對象。如果兩個字符串指向同一個對象,那麼它們就是相同的,使用==比較的結果也就是True。如果兩個字符串指向不同的對象,那麼它們不相同,使用==比較的結果也就是False。
通過字面賦值的時候,相同的字符串會指向同一個對象,例如:

String str1="abcde";// 把"abcde"放入常量池中,編譯時產生
String str2="abcde";// 引用常量池中的對象,不會重新創建對象
str1 == str2; //str1和str2指向同一個對象,結果是true

但如果另有一個str3,不是通過這種字面的方式被賦值的,即便str3的值也是”abcde”,例如:

String str3 = new String("abcde");//運行時把"abcde"放入堆裡面,在堆中創建一個對象
str1 == str3; //str1和str3指向不同的對象,結果是false

相等判斷方法equals()

在Java中,可以使用equals()方法判斷字符串的內容是否相同。

String str1="abcde";
String str3 = new String("abcde");
str1.equals(str3);//str1和str3的值一樣,結果是true 
str1 == str3; //str1和str3指向不同的對象,結果是false

equals()方法原理

為什麼可以使用equals()方法呢,我們看下String 類中的 equals()方法的源碼。

public boolean equals(Object anObject) {
  if (this == anObject) { //先比較兩個字符串的引用是否相等(是否指向同一個對象), 是直接返回true
    return true;
  }
  if (anObject instanceof String) { //兩個引用不等還會繼續比較
    String anotherString = (String)anObject;
    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 類型數據的equals()方法時,首先會判斷兩個字符串的引用是否相等,也就是說兩個字符串引用是否指向同一個對象,是則返回true。
如果不是指向同一個對象,則把兩個字符串中的字符挨個進行比較。

總結

上述就是我為大傢分享的java判斷兩個字符串是否相等的方法瞭,如果您也有類似的疑惑,不妨礙參照上述分析進行理解。在不斷的學習中,我相信會有更多的經驗分享,歡迎大傢持續關註。

到此這篇關於Java中判斷字符串是否相等的實現的文章就介紹到這瞭,更多相關Java 字符串相等內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: