java 中的 equals 和 == 應該選擇哪個來使用

在java開發中經常會涉及到字符串比較的問題。

比較常見就是  == equals

這兩個方法都可以用來比較字符串,但是 == 要慎重使用,因爲兩個相同的字符串用 == 來比較也是會出現 false的現象。用代碼來驗證這個問題。

        String a = "abcd";
        String b = "ab";
        String c = "cd";
        String e = b + c;
        String f = "abcdef";
        String g = f.substring(0,4);
        System.out.println("abcd".equals(a));
        System.out.println("abcd".equals(e));
        System.out.println("abcd".equals(g));
        System.out.println();
        System.out.println("abcd" == a);
        System.out.println("abcd" == e);
        System.out.println("abcd" == g);

a 是完整的“abcd” , e是通過 + 來拼接成“abcd” ,  g是通過substring字符串截取成“abcd”

 

1. 首先我們從equals 來看,可以看到三個對比都是true

 

2.再來看 == ,第二、三個比較都是false,可以得出結論通過 +號拼接substring截取 是不能用 == 來比較的。

 

光知道不能用==來比較還不夠,還需要知道爲什麼不能比較,於是通過書籍查找和網上搜索原因。

 

發現 == 和 equals 比較的是兩個東西

equals比較的是字符串的內容(值),因爲上面4個字符串的內容都是 abcd ,所以返回的結果也都是true。

而 == 比較的是字符串的內存地址(引用),這裏通過 +號拼接substring截取 的兩種方式改變了字符串的內存地址,理所當然,返回的結果就變爲false

 

總結:可以用這種方式來記憶,虛擬機始終將相同的字符串共享,就可以使用 == 運算符來檢測是否相等。但是 +號拼接substring截取 返回的結果並不是共享的。所以在程序中要慎重使用 == 來比較字符串

 

附上一個比較字符串(不區分大小寫)方法: equalsIgnoreCase

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章