Java String中的==和equals()
阿新 • • 發佈:2018-12-10
//測試類 public Test{ public static void main(String[] args) { String str1 = new String("java"); String str2 = new String("java"); String str3 = "java"; String str4 = "java"; System.out.println(str1 == str2); System.out.println(str1.equals(str2)); System.out.println(str1 == str3); System.out.println(str1.equals(str3)); System.out.println(str3 == str4); } }
執行結果是什麼呢? false true false true true
為什麼四個字串中的內容相同但是不同的運算子得到的結果卻不一樣呢?
在Java中運算子==比較的是物件的引用,對於str1和str2,由於使用了String類的構造方法,所以str1和str2在記憶體中有不同的地址,因此str1==str2返回的也就是false了.而String中的equals()方法比較的是兩個物件中的內容,所以str1.equals(str2)返回的就是true了.
那為什麼str3==str4返回的結果又是true了呢?
原來使用字串”java”直接賦值給字串變數str3/str4只是把”java”在記憶體中的地址賦給了它們,並沒有建立新的地址,所以str3和str4指向的是同一個地址,因此str3==str4返回的結果是true.
總結:在字串的比較中,應注意==和equals()的區別 ==比較的是字串物件的地址,而equals()比較的是字串的內容 並且在建立字串是應該注意,通過new建立的字串,就算內容相同,在記憶體中的地址也不會相同,此時如果要比較字串的內容就應該使用equals()方法而不是==.