2015-10-08 31 views
8

我在布爾類的源看到以下內容:Boolean.FALSE或new Boolean(false)?

public static final Boolean FALSE = new Boolean(false); 

因此,如果我理解正確的領域FALSEBoolean類是Boolean本身已其boolean字段設置爲false

現在我想知道下面的兩個陳述是否真的相同。

Boolean myBool = new Boolean(false); 

Boolean myBool = Boolean.FALSE; 

我會假設,在一個新的Boolean對象的構造與第一種情況和myBool參考點到它,而在第二種情況下,我們實際上做參考的副本到Boolean.FALSE對象 - 這是正確的嗎?

如果是這樣的話有什麼區別真的是什麼意思?

最後但並非最不重要的實際問題:我更喜歡哪兩種選擇,爲什麼?

+1

你應該使用'Boolean.FALSE'。這符合JDK可能具有的未來更新。 –

+1

而且'Boolean.valueOf()'通常更適合'new Boolean()'。 – Keppil

+3

都不是。使用'false'讓編譯器通過自動裝箱將其排除。 – EJP

回答

1

您應該使用Boolean.FALSE而不是在堆上創建新對象,因爲它不是必需的。我們應該使用這個靜態的final Object來存儲內存,甚至可以更快地訪問它。

是的,你是正確的:一個新的Boolean對象的構造

第一種情況和myBool 參考點,以它

但是在第二種情況下,我們只是指向現有對象。

而你的另一個問題,而我們有布爾。假我們爲什麼有新布爾(假)的原因是它是一個構造函數。假設你有一個原始的布爾變量x,並且你不知道它的值是真是假,並且你想要一個相應的布爾對象,比這個構造函數將被用來傳遞該原始布爾變量x來獲得布爾對象。

+1

在這種情況下,不會出現Keppil的評論,而應該使用Boolean.valueOf()? – dingalapadum

+1

是的,最好在構造函數上使用Boolean.valueOf()。 – proudandhonour

+0

@Keppil ok。然後作爲後續:我不明白爲什麼會想要一個新的布爾對象,而不是總是讓它指向Boolean.FALSE(Boolean.TRUE)。從我看到'valueOf'實際上也是這樣。那麼有沒有*任何用例,其中一個真的會創建一個新的布爾對象? – dingalapadum

3

的區別:

Boolean.FALSE == Boolean.FALSE 

(布爾)真

new Boolean(false) == new Boolean(false) 

(布爾)假


使用

Boolean myBool = false; 

並讓自動裝箱處理它。

相關問題