2013-10-31 263 views
1

布爾實例如何初始化?正確初始化布爾值的方法

是否

Boolean b = null; 

Boolean b = new Boolean(null); 

哪一個是正確的編碼的做法呢?

+1

我會說第一個。第二個有點沒道理......但那就是我。 – Jakob

+1

爲什麼無論如何都要有一個空布爾值? – Edeph

+0

在一個我找不到它是真還是假的地方 – Abichellam

回答

3

第一個是正確的,如果你想nullBoolean

我個人不喜歡null價值觀和喜歡使用boolean,從而無法null缺省情況下爲false

爲了理解第二條語句是否需要了解Java原始包裝器。 A Boolean只是一個圍繞boolean的對象封裝;當您直接聲明:

Boolean b = false; 

有一些自動裝箱回事,如果你聲明new Boolean然後創建一個新的,獨立的Boolean對象,而不是讓這基本上等同於寫

Boolean b = Boolean.FALSE; 

編譯器(可能)重新使用現有的引用。

它很少(如果有的話)使用基本包裝類型的構造函數是有意義的。

1

絕對不需要爲布爾創建一個新對象。 這是javadoc所說的

注意:使用此構造函數很少合適。除非需要新實例,否則靜態工廠的valueOf(boolean)通常是更好的選擇。它可能會產生更好的空間和時間表現。

+0

+1。但爲什麼不僅僅依靠自動裝箱? – Axel

+0

@Axel,我總是依靠自動裝箱,我引用javadoc來解釋構造函數。 –

1

Boolean b = new Boolean(null);使用Boolean(String)構造函數和b內部布爾值設置爲false和是不同的設置b參考爲空。

Boolean b = null; 
System.out(b.boolValue()); throws a NullPointerException 

Boolean b = new Boolean(null); 
System.out(b.boolValue()); will print `false` 

如果你只需要兩個狀態值(一個布爾值)使用原始的布爾值;如果你需要一個三態對象(null, true, false)使用Boolean對象並設置對象的引用 - 如在第一個例子 - 以null

0

都正確申報

Boolean b = null; 

這是不變的創造,它會去常量池內存。您需要使用==運算符來比較兩個布爾常量。

Boolean b = new Boolean(null); 

這是對象的創建,它會去堆memory.You需要使用.equals()方法來比較兩個布爾對象。