2015-10-08 14 views
8

私はブールクラスのソースに次のように見た:私が正しく理解していればBoolean.FALSEまたは新しいブール値(false)?

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

したがって、BooleanクラスのフィールドFALSEfalseにそのbooleanフィールドがセットされているBooleanそのものです。

次の2つの文が本当に同等であるかどうかは疑問です。

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'を使ってコンパイラにautoboxingでソートさせます。 – EJP

答えて

1

ヒープ上に新しいオブジェクトを作成するのではなく、Boolean.FALSEを使用する必要があります。この静的な最終オブジェクトObjectをメモリに使用する必要があります。さらに、これにアクセスする方が高速です。

そして、はい、あなたしている正しいこと:

最初のケース新しいBooleanオブジェクトが構築されており、myBool 基準点それに

しかし、後者の場合には我々だけで、既存のオブジェクトを指します。

私たちはブールを持っている間あなたの別の質問新しいブール値(偽)理由はそれがコンストラクタだという理由があります。プリミティブなブール変数xがあり、それが真か偽かを問わず、対応するブールオブジェクトが必要な場合は、このプリミティブブール変数xにブール値オブジェクトを渡すためにこのコンストラクタを使用します。

+1

その場合、Keppilのコメントが適用され、むしろBoolean.valueOf()を使用する必要がありますか? – dingalapadum

+1

はい、コンストラクタに対してBoolean.valueOf()を使用する方が良いです。 – proudandhonour

+0

@Keppil ok。それではフォローアップとして、私はなぜ新しいブール値オブジェクトを必要とするのか、ブール値.FALSE(Boolean.TRUE)のどちらかを常に指し示すのではないのです。私は 'valueOf'が実際にそれをも参照してください。だから、本当に新しいBooleanオブジェクトを作成するユースケースがあるか? – dingalapadum

3

違い:

Boolean.FALSE == Boolean.FALSE 

(論理値)true

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

(ブール値)偽


使用

Boolean myBool = false; 

とそれを処理するautoboxingしましょう。

関連する問題