2015-07-10 27 views
3

的Java布爾類變量,用於比較

Boolean condition; 

public Boolean isCondition() { return condition; } 

是那麼這種方法的以下使用不允許的,因爲有一種原始的,

if (isCondition()) 
{ 
    //... 
} 

我會使用原語,但不知道關於班級。是否需要檢查空值?首先需要getBooleanValue()嗎?

+0

你可以做到這一點,但正如你傷心,你必須檢查爲空。更好地使用簡單類型。 –

+0

由於「布爾」是一個類,它可以爲空。你可以返回一個'boolean',因爲它會被[autoboxed](https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)。 – Turing85

+0

謝謝圖靈85。你可能的意思是,你可以返回一個布爾值(大寫字母-B),因爲它會自動寫入布爾值(小寫)。 –

回答

7

是的,你可以使用任何盒裝基元(在你的情況下,Boolean)作爲基元本身;即,如果您可以保證condition被設置爲非空值,您的示例就可以工作。

這裏需要注意的是,如果任何盒裝原語本身在拆箱時都是null,you will get a NullPointerException。如果你有這個值的可能性是null,你應該重新評估你爲什麼首先使用盒裝原語。改用拆箱原語(在你的情況下,boolean)可能會更好。

2

是的,因爲它是一個引用類型,所以需要根據null進行檢查。在if條件下對原始類型boolean進行的自動拆箱依賴於調用Boolean#booleanValue(),如果condition變量爲null,則會引發NPE。

0

我發現了一個簡單的解決方案,

if(Boolean.TRUE.equals(isCondition())){ .. } 

因爲表達的是在右邊這不會拋出NPE,我們仍然可以進行比較。