[英]Boolean Object and boolean variable issue in JAVA
我聲明了一個 Boolean 變量。 例如Boolean dataVal=null;
現在,如果我執行以下代碼段:
if(dataVal)
System.out.println("\n\NULL value in dataVal: "+dataVal);
else
System.out.println("\n\nvalue in dataVal: "+dataVal);
我得到NullPointerException
。 好吧,我知道這很明顯,但我需要知道這背后的原因。
當您評估Boolean
對象Java的布爾值時,取消該值(自動裝箱功能,自1.5起)。 所以真正的代碼是: dataVal.booleanValue()
。 然后它拋出NullPointerException
。 對於任何裝箱值,取消裝箱空對象會拋出此異常。
在1.5之前你必須手動取消裝箱值: if (dataVal.booleanValue())
所以它更明顯(更詳細:)
由於dataVal
被強制轉換為boolean
使用Boolean.booleanValue()
其被翻譯成null.booleanValue()
這導致你一個NullPointerException。
您可以查看拆箱問題的規范,您的情況在此處描述5.1.8拆箱轉換 : 如果r為null,則拆箱轉換會拋出NullPointerException
這意味着你的if(/ * Boolean對象* /)永遠不會被拆箱成布爾基元類型,因此拋出一個NPE因為你做了一個無效的if(null)
。
順便說一句,如果您有以下情況,拆箱將起作用:
final Boolean booleanTest = new Boolean (true);
if (booleanTest) {
// Do something
}
Boolean(class)!= boolean(primitive type)。
Java嘗試獲取調用dataVal.booleanValue()的原始值。 因為dataVal為null,所以會得到空指針異常。
當您嘗試評估布爾對象值時,jvm在內部調用該對象上的booleanValue(),因為您為該對象賦值null,它將拋出NullPointerException
使用 BooleanUtils.tobolean(?),如果傳遞的參數為 null,則返回 false
if(null)
不是有效的表達式,就像那樣簡單。
在引擎蓋下,VM正在使用自動裝箱......所以你得到一個NullPointerException.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.