簡體   English   中英

s.equals(“”)和“”.equals(s)之間有什么區別

[英]What is the difference between s.equals(“”) and “”.equals(s)

首先: s.equals("")"".equals(s)之間有什么區別?

第二:如果我要執行其中一項功能會怎樣? "".substring(1)"".charAt(0)

關於等於,當涉及結果時,兩個等於變體之間沒有差異。 但是,第二個是nullsafe。 如果s為null,則第一個將拋出NullPointerException,第二個變量將僅計算為false

第一個問題:如果s不為null ,則沒有區別。 如果snull ,則s.equals("")將拋出NullPointerException"".equals(s)將僅返回false

第二:這兩個都會拋出IndexOutOfBoundsException

第一

為兩者調用類實例的方法。 所以內部沒有區別。

但值得注意的是, "".equals(s)不太可能拋出NullPointerException 對於String類,它實現如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

第二

"".substring(1);

此調用將拋出IndexOutOfBoundsException 從Java的文檔中發生異常: 如果beginIndex為負或大於此String對象的長度。

"".charAt(0):

此外,它會拋出異常,並且如前面的示例所述: IndexOutOfBoundsException - 如果index參數為負或不小於此字符串的長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM