Javaの「ブール」および「ブール」のデフォルト値


回答:



390

いずれかのデフォルト値はObject、のようなBoolean、ですnull

aのデフォルト値booleanはfalseです。

注:すべてのプリミティブにはラッパークラスがあります。すべてのラッパーは、デフォルトのを持つ参照を使用しますnull。プリミティブにはさまざまなデフォルト値があります。

boolean -> false

byte, char, short, int, long -> 0

float, double -> 0.0

注(2): voidラッパーVoidがあり、これにもデフォルトのがnullあり、可能な値のみです(ハックを使用しない)。


2
私は1つが言及できると思いますBooleanされObject、それが最初の行が明らかに意味になるだろう。これはかなり基本的なことのように聞こえますが、このような基本的な質問をする人にとっては役立つかもしれません。
スマ

23

booleanまたはにする
ことができます。 デフォルト値はです。truefalse
false

(出典:Javaプリミティブ変数

ブール値
を指定できBoolean、オブジェクトが表すtruefalseまたはことができますnull
デフォルト値はnullです。


17

質問する必要がある場合は、フィールド/変数を明示的に初期化する必要があります。これを調べる必要がある場合、他の誰かがそれを行う必要がある可能性があるためです。

ここbooleanに見られるように、プリミティブの値はfalse です

他の人が述べたように、aの値はBooleanデフォルトでnullになります。


公式情報源をご参照いただきありがとうございます。初期化に関しては、知識の不足を補う必要はありません。
LoBo、2015年

2
「知識の欠如」は、比較するいくつかの期待されるレベルがあることを意味します。この最小限の知識レベルが明らかであれば、私は同意する。そうでない場合は、より明確にすることを誤るのが賢明だと思います。全体として、これはかなり個人的な/チームの決定/意見です。
Peter Tillemans、2015年

4
@LoBo-知識不足の可能性を補うことに問題はないと思います。誰がコードを管理するのかはわかりません。パフォーマンスにほとんど影響を与えずに、コードをより簡単に理解したり読みやすくしたりすることは、良いことでしかありません。
ferekdoley

9

ブール値はオブジェクトです。したがって、インスタンス変数の場合はnullになります。メソッド内で宣言されている場合は、初期化する必要があります。そうしないと、コンパイラエラーが発生します。

プリミティブ、つまりブール値として宣言した場合。インスタンス変数(またはクラス変数)の場合、値はデフォルトでfalseになります。メソッド内で宣言されている場合でも、trueまたはfalseに初期化する必要があります。そうしないと、コンパイラエラーが発生します。


6

初期化されていないBooleanメンバー(実際にはタイプのオブジェクトへの参照Boolean)のデフォルト値はnullです。

初期化されていないboolean(プリミティブ)メンバーのデフォルト値はfalseです。


4

のデフォルトはありませんBoolean。またはBooleanで構築する必要があります。オブジェクトが初期化されていない場合は、を指します。booleanStringnull

プリミティブのデフォルト値はbooleanですfalse

http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


私はこれらの3つの反対投票は、かなり不明確な声明である「デフォルトがない」とあなたが言うからだと思います。あなたが言うように、初期化されていないオブジェクト参照はを指しnullます。nullがデフォルトなので、存在しないと言ったときに何を参照しているかはわかりません。(もしかして、「Booleanどちらtrueでもないfalse、デフォルトではない」のような意味ですか?)
Radiodef

はい、あなたが置くものはより正確です。より簡潔な受け入れられた回答がすでにあります。投稿の反対投票と編集の両方で何が得られるかわかりません。
ステルスラビ

1
明確にするために、私は反対票を投じなかったし、私の編集は私のコメントとはまったく無関係でした。提案されたフレーズを承認した場合は、回答を編集することをお勧めします。そうすれば、コメントを削除して整理できます。
Radiodef

1
class BooleanTester
{
    boolean primitive;
    Boolean object;

    public static void main(String[] args) {
        BooleanTester booleanTester = new BooleanTester();
        System.out.println("primitive: " + booleanTester.getPrimitive());
        System.out.println("object: " + booleanTester.getObject());
}

    public boolean getPrimitive() {
        return primitive;
    }

    public Boolean getObject() {
        return object;
    }
}

出力:

primitive: false
object: null

これは明らかなようですが、JacksonがオブジェクトをJSONにシリアル化しているときに、ゲッターを呼び出した後にNPEをスローして、割り当てられていないプリミティブブール値を返すという状況がありました。これにより、Jacksonがnullを受信し、そのメソッド、つまりNPEを呼び出そうとしていると思いました。私は間違っていた。

物語の教訓は、Javaがメモリをプリミティブに割り当てるとき、そのメモリは初期化されていなくても値を持ち、Javaはブール値の場合はfalseに相当するということです。対照的に、ブール値などの初期化されていない複雑なオブジェクトにメモリを割り当てる場合は、オブジェクト自体ではなく、そのオブジェクトへの参照にスペースのみが割り当てられます。参照するメモリ内にオブジェクトがないため、その参照を解決するとnullになります。

厳密に言えば、「デフォルトでfalseになっている」というのは少しおかしいと思います。Javaはメモリを割り当てず、明示的に設定されるまでfalseの値を割り当てません。私はJavaがメモリを割り当てると思います、そしてメモリが持つどんな値も「偽」の値と同じです。しかし、実際には同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.