[英]Java null String equals result
請幫助我 java 中的 string.equals 如何處理空值? 異常有問題嗎? 三種情況:
boolean result1,result2, result3;
//1st case
String string1 = null;
String string2 = null;
result = string1.equals(string2);
//2nd case
String string1 = "something";
String string2 = null;
result2 = string1.equals(string2);
//3rd case
String string1 = null;
String string2 = "something";
result3 = string1.equals(string2);
結果的價值是什么? 我期望這個值:
結果 1 為真;
結果 2 為假;
結果 3 為假;
如果實例為null
,則不能使用取消引用(點,'.')運算符訪問實例變量或調用實例上的方法。 這樣做會產生NullPointerException
。
通常的做法是使用您知道為非空的內容進行字符串比較。 例如, "something".equals(stringThatMayBeNull)
。
如果您使用的是 JDK 7 或更高版本,請使用Objects.equals()
來比較字符串或任何其他對象。 它將處理空值而不拋出異常。 在此處查看更多信息: how-do-i-compare-strings-in-java
如果你沒有運行 JDK 7 或更高版本,你可以像這樣從Objects
復制equals
方法:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
實際上,您不能在null
變量上使用點運算符來調用非靜態方法。
盡管如此,一切都取決於覆蓋Object
類的equals()
方法。 在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;
}
如果你傳遞null
作為參數,兩個“if”都會失敗,返回false
;
您的案例的另一種選擇是為您的要求構建一個方法:
public static boolean myEquals(String s1, String s2){
if(s1 == null)
return s2 == null;
return s1.equals(s2);
}
每當 string1 為 null 並且您對其調用equals
時,這段代碼將拋出NullPointerException
,就像在任何 null 對象上隱式調用方法時的情況一樣。
要檢查字符串是否為空,請使用==
而不是equals
。
盡管由於 NullPointerExceptions 而不會設置result1
和result3
,但 result2 將為 false(如果您在其他結果的上下文之外運行它)。
在情況 1 和情況 3 中,您將獲得 NullPointerException。
您不能在空對象上調用任何方法(如equals()
)。
如果至少有一個字符串可以為空,要在比較字符串時防止 NPE,請使用空安全的 StringUtils.equals 方法。
我來晚了回答這個問題,但你可以使用
StringUtils.equals(str1, str2)
如果你使用彈簧
我們不能對 null 使用點運算符,因為這樣做會產生 NullPointerException。 因此我們可以在我們的程序中利用 try..catch 塊。 這是解決問題的一種非常粗略的方法,但您會得到所需的輸出。
try {
result = string1.equals(string2);
} catch (NullPointerException ex) {
result = string2 == null; //This code will be executed only when string 1 is null
}
我們最常見的這種類型的用例是當我們有一個包含“Y”或“N”來表示布爾值的數據庫字段時(這是一個舊系統,不要問)。
因此,我們這樣做:
if ("Y".equals(stringObjectThatMayBeNull)? result: otherResult);
而不是這個:
if (stringObjectThatMayBeNull.equals("Y")? result: otherResult);
...在執行 the.equals 方法時避免了 NullPointerException。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.