[英]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
,則沒有區別。 如果s
為null
,則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.