web-dev-qa-db-ja.com

Javaの3番目のブール状態は何ですか?

定義上、ブール値はtrueまたはfalseの2つの状態のみで構成されていることを私は知っています。これらの状態のいずれかで初期化される前に、ブール値にはどのような値があるのか​​疑問に思いました。

26
soldier.moth

ローカル変数の場合、初期化される前に参照するとコンパイラエラーになります。フィールドの場合、falseに初期化されます。

16
Yishai
public class NewMain {

    boolean foo;
    Boolean bar;

    public static void main(String[] args) {
        NewMain obj = new NewMain();

        obj.whatBoolean();
    }

    public void whatBoolean() {
        System.out.println(foo);
        System.out.println(bar);
    }
}

出力

false
null

私はこれがより哲学的な質問であることを知っていますが、オートボクシングのおかげで、Javaをほぼ真のOO言語として使用できます(プリミティブ型を持つのは嫌いです。 。今は逆に機能する場合のみ)ただし、オブジェクトを使用すると動作が変わります(IMOを改善するため)。

9
Trey

3番目の状態はありません。 @Yishaiが言ったように、値を割り当てない場合、ブールフィールドはデフォルトでfalseになります。ローカル変数は、使用する前に割り当てる必要があります。

初期化されていないローカル変数にアクセスすると、コンパイル時エラーが発生します

ドキュメント を参照してください。

2
JeffH

In Javaブール型のデフォルトはFalseです。

1
Matthew Vines

参考までに、ブール値のデフォルトはfalse、プリミティブ番号のデフォルトは0、0L、0f、または0d、charのデフォルトは「\ 0」、オブジェクト参照(ブール値など)のデフォルトはnullです。

これは、配列の内容にも当てはまります。 (一般的な落とし穴は、オブジェクトの配列が最初はnull値でいっぱいになることです)

1
Peter Lawrey

false

0
NinethSense

あなたがのようなものを持っていた場合

boolean isTrue;

System.out.println(isTrue);

ブール値が初期化されていないため、コンパイル時エラーが発生するはずです。デフォルトでは、これを初期化しようとするとfalseに設定されます。

0
PSU_Kardi