<b>3.6.4 檢測字元串是否相等</b>
可以使用equals方法檢測兩個字元串是否相等。對于表達式:
如果字元串s與字元串t相等,則傳回true;否則,傳回false。需要注意,s與t可以是字元串變量,也可以是字元串字面量。例如,下清單達式是合法的:
要想檢測兩個字元串是否相等,而不區分大小寫,可以使用equalsignorecase方法。
一定不要使用==運算符檢測兩個字元串是否相等!這個運算符隻能夠确定兩個字元串是否放置在同一個位置上。當然,如果字元串放置在同一個位置上,它們必然相等。但是,完全有可能将内容相同的多個字元串的拷貝放置在不同的位置上。
如果虛拟機始終将相同的字元串共享,就可以使用==運算符檢測是否相等。但實際上隻有字元串常量是共享的,而+或substring等操作産生的結果并不是共享的。是以,千萬不要使用==運算符測試字元串的相等性,以免在程式中出現糟糕的bug。從表面上看,這種bug很像随機産生的間歇性錯誤。
c++注釋:對于習慣使用c++的string類的人來說,在進行相等性檢測的時候一定要特别小心。c++的string類重載了==運算符以便檢測字元串内容的相等性。可惜java沒有采用這種方式,它的字元串“看起來、感覺起來”與數值一樣,但進行相等性測試時,其操作方式又類似于指針。語言的設計者本應該像對+那樣也進行特殊處理,即重定義==運算符。當然,每一種語言都會存在一些不太一緻的地方。
c程式員從不使用==對字元串進行比較,而使用strcmp函數。java的compareto方法與strcmp完全類似,是以,可以這樣使用:
不過,使用equals看起來更為清晰。