簡體   English   中英

Java 空字符串等於結果

[英]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 而不會設置result1result3 ,但 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.

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