9

ブール値の代わりにブール値を使用する必要があるのはいつですか? つまり、「true」または「false」のいずれかを含む必要がある変数に null 値を設定したいのはなぜでしょうか。(ほとんどの人が) 1 つの自発的な答えは、値が不明な場合です。つまり、値が真か偽かがわからない場合です。しかし、プログラミングの観点からは、ブール値を使用するとコードが壊れる可能性があると思います。したがって、プリミティブ型を使用する方がラッパーよりも優れていると思います.間違っている場合は修正してください。

4

8 に答える 8

16

一般的に言えば、ラッパー クラスは、オブジェクトが必要な場合や非常に優先される場合に使用されます。これらの状況以外では、プリミティブ型を使用する方がオーバーヘッドが少ないため==、 などを使用することをお勧めします。これが頻繁に見られる 2 つ半の主要な状況があります。

  • コレクション。これは現在、次のケースのサブセットですが、Java 5 より前でも Collections クラスはオブジェクトをキーと値としてのみサポートしており、これは変更されていません。
  • ジェネリック。ジェネリック型は、プリミティブではなくオブジェクトでのみ機能するため、型パラメーターとして「ブール値」を使用している場合は、ラッパー クラスである必要があります。たとえば、を使用している場合は、 の代わりにFutureを使用する必要があります。(HT @user949300)Booleanboolean
  • ORM。JPA およびその他の ORM システムは、技術的にはプリミティブ フィールドを使用できますが、オーバーヘッドが十分に高いため、実際には問題にならないため、ラッパー クラスを使用するのが通例であり、ラッパー クラスNULLはデータベースに存在する可能性のある値を表すことができます。 . ただし、意味的にはデフォルトの方が通常「未定義」よりも優れているため、通常はnullを禁止し、ブール値にプリミティブを使用する方が適切です。

ブール値は または のいずれtruefalseに制限されているため、コレクションまたはジェネリックで使用されることはまれです。一般的に言えば、ブール値を値として使用する場合は、Collection#contains代わりに使用します。

于 2013-09-23T06:54:16.353 に答える
10

IMHOプリミティブの方が優れています。

ラッパーよりも常にプリミティブを優先します。実行時にラッパーを使用すると、ボックス化変換ボックス化解除変換が発生し、明らかに時間がかかります。そこでプリミティブを使用すると、その時間を節約できます。

そして、いつものように、あなたの状況で が必要かObject( である可能性がありますnull)、またはプリミティブ ( ではないnull) を使用できるかは、要件によって異なります。

例:コレクションを扱っていると仮定すると、オプションはありません。ラッパーを使用する必要があります:)。

于 2013-09-23T06:51:37.300 に答える
5

ブール値には 3 つの可能な値 (null、true、false) がありますが、ブール値は (true、false) のみです。

于 2013-09-23T06:51:46.797 に答える
3

私はプリミティブをとても好みます。ただし、ブール値は必要です。

  1. コレクションに入るとき
  2. null 値を許可する必要がある場合。私の経験では、これは主にデータベースに保存されていて、まだ読み取られていないこと、またはユーザーがまだ何らかのフォームに入力していないことを示すために null が必要な場合です。
于 2013-09-23T06:55:27.363 に答える
0

コレクションを使用する必要がある場合はどうしますか? コレクションはプリミティブ型を保存しません。そこにオブジェクトを保存する必要があります。コレクションは非常に多くのユーティリティ api を提供するため、それらを使用する場合は、コレクションにはオブジェクトが必要になるため、ブール型オブジェクトが必要です。いつでもオートボクシングを使用できますが、オブジェクトの作成から保護され、コレクションが内部でそれを処理します。

于 2013-09-23T06:51:32.393 に答える
0

Wrapper クラスは、オブジェクトが必要な場合、またはコレクション、キャッシュ、セッションなどにオブジェクトを格納する場合など、オブジェクトが必要な場合に使用されます (そうでない場合、JRE はプリミティブを Wrapper クラスに変換してからセカンダリに格納します)。キャッシュ)。以下のリンクはよりよく説明します:

Javaのブール値とブール値

于 2013-09-23T06:51:40.237 に答える
0

Booleanはオブジェクトなので、ジェネリックで使用できます。たとえば、Map<String,Boolean>文字列 (= キー) ごとに true/false 値を格納する必要がある場合があります。はオブジェクトではないMap<String,boolean>ため、実行できません。具体的には、のサブクラスではありません。ジェネリックはコンパイル時のラッパーであるため、クラスまたは配列型である限り、実際にはスマート キャストを使用します。しかし、それらはプリミティブになることはできません。booleanObjectMap<Foo,Bar>Map<Object,Object>FooBar

于 2013-09-23T06:54:24.230 に答える
-1

ブール値は、プリミティブ型のブール値に対してブール値をラップするオブジェクト/参照型です。

Boolean - 便利なメソッドをさらに取得できます。

boolean - 多くのメモリを節約します。しかし、 を使用する場合Boolean.valueOf(value) of new Boolean(value)、それは原因ではありません。

このようなプリミティブとオブジェクト間の変換は、ボックス化/ボックス化解除として知られています。

詳細については、以下のリンクをクリックしてください。

http://javaeye.wordpress.com/2008/06/17/boxing-and-unboxing-conversion/

http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html

http://www.javapractices.com/topic/TopicAction.do?Id=197

于 2013-09-23T06:58:37.283 に答える