簡體   English   中英

Java對象空檢查

[英]Java null check on object

好的,這是一個簡單的問題,我對此沒有任何問題,但我只是想確定一下。 我做這樣的事對嗎?

if (person != null && person.getAge > 20) {...}

我可以這樣做嗎? 空檢查和對象訪問在同一行上? 這個對嗎? 或者我必須在null檢查語句上做一個內部語句,例如:

if (person != null)
{
    if (person.getAge() > 20) {...}
}

imo,第一個聲明不會拋出NPE,但我需要專業人士的反饋...

通常,我的問題是,在帶有&&的if語句上,如果第一個布爾值為false,那么JVM會停止執行if語句還是將全部檢查?

是。 運算符&&|| 是所謂的短路運算符。 這意味着,一旦知道答案(從左到右讀取),就不會評估條件中的其他語句。 在您的情況下,只要person != null部分的計算結果為false ,無論其他語句如何,都將保證整個條件為false,因此person.getAge > 20不會被評估,並且不會引發異常。 同樣,如果使用|| ,並且第一部分的評估結果為true ,因此第二部分將不會評估,因為在那一點上,總的條件保證是true

是的,你可以這么做。 如果person為空,它將看到

if(person != null && otherBoolean  )

如果person != null為false,那么otherBoolean是什么都沒有關系,因為otherBoolean表達式都將保證為false。

它首先評估最左邊的表達式,因此如果您以其他順序使用它,那將不起作用。


作為旁注,您可以通過編寫以下代碼輕松測試此代碼:

person = null;

if (person != null && person.getAge > 20) {...}

這稱為短路,並且這樣做非常好。

if (person != null && person.getAge > 20) {...}

始終確保您執行null檢查,並且&&僅在前一個條件為true才會檢查下一個條件。

在這種情況下,僅當person != nulltrue時才檢查person.getAge > 20


還要檢查以下SO問題: Java邏輯運算符短路

進一步閱讀: 避免在Java中使用“!= null”語句?

if (person != null && person.getAge > 20) {...}//good to go with that

當然,在這種情況下,如果人員為null,則不會評估person.getAge> 20,因此您將不會獲得NPE

一定要閱讀Java中的&&運算符,它不會檢查第二個值

if (person != null && person.getAge > 20) {...}

&&是短路邏輯AND。 因此,如果person != null為false,則不會評估person.getAge > 20

&是邏輯AND,不會短路。 如果使用if (person != null & person.getAge > 20)person為null,則在對person.getAge > 20進行求值時,將獲得空指針異常。

暫無
暫無

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

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