1 前言
在 Java 語言中,equals 和 == 都是用來檢測兩個字符串是否相等,返回值也都是布爾型(boolean),但是兩者在內(nèi)部比較的處理中卻不盡相同,因此在需要檢測兩個字符串是否相等的時候,我們一定要特別的注意,選擇適當?shù)臋z測方式,防止造成不必要的 bug。從表面上來看,這種 bug 很像隨機產(chǎn)生的間歇性錯誤。
2 區(qū)別
在需要檢測兩個字符串是否相等的時候,我們可以使用 equals 方法。對于表達式:
1
|
s.equals(t) |
如果字符串 s 與字符串 t 相等,則返回 true;否則,返回 false。需要注意的是,s 與 t 可以是字符串常量也可以是字符串變量。例如,下面的表達式就是合法的:
1
|
"Hello" .equals(greating) |
更進一步,如果想要檢測兩個字符串是否相等,而不區(qū)分大小寫,可以使用 equalsIgnoreCase 方法。例如,下面的表達式的值就是 true:
1
|
"Hello" .equals( "hello" ) |
在此,一定不能用 == 運算符來檢測兩個字符串是否相等!因為恒等運算符只能夠確定兩個字符串是否放置在同一個位置上。當然,如果兩個字符串放置在同一個位置上,它們必然相等。但是,完全有可能將內(nèi)容相同的多個字符串的拷貝位置放置在不同的位置上。
如果虛擬機始終將相同的字符串共享,就可以使用 == 運算符來檢測兩個字符串是否相等。但實際上,只有字符串常量是共享的,而 + 和 substring 等操作產(chǎn)生的結(jié)果并不是共享的。
3 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/** * @author 維C果糖 * @create 2017-02-14 */ public class equalsAndHD { public static void main(String[] args) { String greating = "Hello" ; if (greating.equals( "Hello" )){ System.out.println( "1,通過 equals 輸出的結(jié)果為:greating 與 Hello 的值相等!" ); } else { System.out.println( "1,通過 equals 輸出的結(jié)果為:greating 與 Hello 的值不相等!" ); } if ((greating.substring( 0 , 2 ) + "llo" ) == "Hello" ){ System.out.println( "2,通過 == 輸出的結(jié)果為:greating 與 Hello 的值相等!" ); } else { System.out.println( "2,通過 == 輸出的結(jié)果為:greating 與 Hello 的值不相等!" ); } } } |
運行以上程序后,結(jié)果如下圖所示:
通過觀察以上的運行結(jié)果,顯然可以發(fā)現(xiàn),該程序完成驗證了我們之前的觀點。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/qq_35246620/article/details/55106611