1. ホーム
  2. java

[解決済み] falseとBoolean.FALSEの違いは何ですか?

2022-03-06 22:52:15

質問

C++の場合 windows.h FALSE は整数として定義され、特殊なロジックの場合には意味を持ちますが、Javaでは java.lang.Boolean.FALSE はブーリアンとして定義され、false に代入されます。
public static final Boolean FALSE と、使っている人を見かけることがあります。

質問ですが falseBoolean.FALSE 一般的に、なぜ人々は Boolean.FALSE ?

解決方法は?

参照 http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html .

Boolean.TRUEBoolean.FALSEboolean である。 Boolean . の静的インスタンスです。 Boolean に対応するラッパーオブジェクトです。 booleantruefalse .

Booleanenum . その TRUEFALSE が返すインスタンスです。 Boolean.valueOf() .

プリミティブとラッパーのパフォーマンスに関しては、気にするほどの差はないでしょう。その TRUEFALSE 静的インスタンスはパフォーマンスを少し向上させ、javadocs では Boolean.valueOf() とは対照的に new Boolean(...) という理由からです。その truefalse ブーリアン値は少し低レベルですが Boolean (とは対照的に boolean いずれにせよ、それは関係ないことです。

あなたのコードにとって最も理にかなっていて、最高の読みやすさにつながる方を使うべきです(そして、プリミティブ型とラッパー型のような微細最適化について考える道を歩み始めては絶対にいけません)。もしあなたが Boolean は、オブジェクトの値を使用します。もし boolean の場合は、プリミティブ値を使用します。もし Booleanboolean のように、より適切なものを使用してください。 Booleannull また、汎用型のパラメータにプリミティブ型を使用することはできません。 boolean できる 決して である null も同様に有用です)。

また、自動ボクシングはプリミティブ型をこれら2つの静的な Boolean のインスタンスで、例えば

Boolean a = true;
assert(a == Boolean.TRUE);



余談ですが、ご指摘があったので。 FALSE が定義されているのは windows.h には2つの理由があります。1) なぜなら windows.h はC言語のみの時代から使用されており、C言語にはネイティブな bool 特に、DLL の境界を越えて Windows API 関数にデータを渡したり(この質問の範囲外)、"true" と "false" の異なる表現を持つ他の言語と統合するために、既知の明確なサイズと値でデータ型と値を定義することが Microsoft の従来の慣習です。の理由とは全く関係ありません。 Boolean.FALSE をJavaで作成しました。