簡體   English   中英

Boolean Object 和 boolean 變量問題在 JAVA

[英]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.

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