您好,登錄后才能下訂單哦!
這篇文章給大家介紹 Java 中的equals與 == 有什么不同,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
詳解 Java 中 equals 和 == 的區(qū)別
1 前言
在 Java 語言中,equals 和 == 都是用來檢測(cè)兩個(gè)字符串是否相等,返回值也都是布爾型(boolean),但是兩者在內(nèi)部比較的處理中卻不盡相同,因此在需要檢測(cè)兩個(gè)字符串是否相等的時(shí)候,我們一定要特別的注意,選擇適當(dāng)?shù)臋z測(cè)方式,防止造成不必要的 bug。從表面上來看,這種 bug 很像隨機(jī)產(chǎn)生的間歇性錯(cuò)誤。
2 區(qū)別
在需要檢測(cè)兩個(gè)字符串是否相等的時(shí)候,我們可以使用 equals 方法。對(duì)于表達(dá)式:
s.equals(t)
如果字符串 s 與字符串 t 相等,則返回 true;否則,返回 false。需要注意的是,s 與 t 可以是字符串常量也可以是字符串變量。例如,下面的表達(dá)式就是合法的:
"Hello".equals(greating)
更進(jìn)一步,如果想要檢測(cè)兩個(gè)字符串是否相等,而不區(qū)分大小寫,可以使用 equalsIgnoreCase 方法。例如,下面的表達(dá)式的值就是 true:
"Hello".equals("hello")
在此,一定不能用 == 運(yùn)算符來檢測(cè)兩個(gè)字符串是否相等!因?yàn)楹愕冗\(yùn)算符只能夠確定兩個(gè)字符串是否放置在同一個(gè)位置上。當(dāng)然,如果兩個(gè)字符串放置在同一個(gè)位置上,它們必然相等。但是,完全有可能將內(nèi)容相同的多個(gè)字符串的拷貝位置放置在不同的位置上。
如果虛擬機(jī)始終將相同的字符串共享,就可以使用 == 運(yùn)算符來檢測(cè)兩個(gè)字符串是否相等。但實(shí)際上,只有字符串常量是共享的,而 + 和 substring 等操作產(chǎn)生的結(jié)果并不是共享的。
3 示例
/** * @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 的值不相等!"); } } }
運(yùn)行以上程序后,結(jié)果如下圖所示:
通過觀察以上的運(yùn)行結(jié)果,顯然可以發(fā)現(xiàn),該程序完成驗(yàn)證了我們之前的觀點(diǎn)。
關(guān)于 Java 中的equals與 == 有什么不同就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。