[英]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 != null
為true
時才檢查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.