溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在JAVA中比較兩個(gè)String對(duì)象

發(fā)布時(shí)間:2020-07-23 06:59:06 來(lái)源:網(wǎng)絡(luò) 閱讀:492 作者:愛(ài)碼仕i 欄目:編程語(yǔ)言

問(wèn)題

最近寫(xiě)程序的時(shí)候,遇到了需要比較兩個(gè) String 對(duì)象是否相等的情況,我習(xí)慣性的寫(xiě)了形如if(a == "a"){}的語(yǔ)句,IDEA 跳出警告,內(nèi)容如下:

String values are compared using '==', not 'equals()'.

也就是說(shuō)我剛剛那句話應(yīng)該寫(xiě)成if(a.equals("a")){}才對(duì),果然不再標(biāo)紅了。

說(shuō)明

那么,為什么會(huì)這樣呢?==equals()分別是什么效果呢?

對(duì)于基本數(shù)據(jù)類(lèi)型byte(字節(jié)型)、short(短整型)、int(整型)、long(長(zhǎng)整型)、float(單精度浮點(diǎn)型)、double(雙精度浮點(diǎn)型)、boolean(布爾型)、char(字符型),==比較的就是他們的值,也不存在equals()方法。

而對(duì)于String這樣的引用數(shù)據(jù)類(lèi)型,==比較的是兩個(gè)對(duì)象的 引用地址 即內(nèi)存地址是否相同,如果內(nèi)存地址相同,自然就是同一個(gè)對(duì)象了,同一個(gè)對(duì)象之間有啥好比的。

我們一般的應(yīng)用場(chǎng)景主要是要比較兩個(gè) String 對(duì)象的內(nèi)容,那就需要使用 equals() 方法。我們可以看一下 java.lang.String 中 equals() 方法的定義,可以看到 equals() 才是在比較兩個(gè) String 對(duì)象的值。

/**
* Compares this string to the specified object.  The result is {@code
* true} if and only if the argument is not {@code null} and is a {@code
* String} object that represents the same sequence of characters as this
* object.
*
* @param  anObject
*         The object to compare this {@code String} against
*
* @return  {@code true} if the given object represents a {@code String}
*          equivalent to this string, {@code false} otherwise
*
* @see  #compareTo(String)
* @see  #equalsIgnoreCase(String)
*/
public Boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

還有一個(gè)特例的情況,比如"abcde" == "abcde"或是"abcde" == "abc" + "de"都是會(huì)返回true的,因?yàn)殡p方都是由編譯器直接實(shí)現(xiàn)的,沒(méi)有被聲明為變量。

小結(jié)

當(dāng)然,如果你知道自己在做什么,就是要利用 == 的這個(gè)特性,自然是沒(méi)有問(wèn)題的。其他時(shí)候用 equals() 方法即可。

愛(ài)碼仕i:專(zhuān)注于Java開(kāi)發(fā)技術(shù)的研究與知識(shí)分享!

————END————
如何在JAVA中比較兩個(gè)String對(duì)象

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI