定義上、ブール値はtrueまたはfalseの2つの状態のみで構成されていることを私は知っています。これらの状態のいずれかで初期化される前に、ブール値にはどのような値があるのか疑問に思いました。
ローカル変数の場合、初期化される前に参照するとコンパイラエラーになります。フィールドの場合、falseに初期化されます。
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を改善するため)。
3番目の状態はありません。 @Yishaiが言ったように、値を割り当てない場合、ブールフィールドはデフォルトでfalseになります。ローカル変数は、使用する前に割り当てる必要があります。
初期化されていないローカル変数にアクセスすると、コンパイル時エラーが発生します
ドキュメント を参照してください。
In Javaブール型のデフォルトはFalseです。
参考までに、ブール値のデフォルトはfalse、プリミティブ番号のデフォルトは0、0L、0f、または0d、charのデフォルトは「\ 0」、オブジェクト参照(ブール値など)のデフォルトはnullです。
これは、配列の内容にも当てはまります。 (一般的な落とし穴は、オブジェクトの配列が最初はnull値でいっぱいになることです)
false
あなたがのようなものを持っていた場合
boolean isTrue;
System.out.println(isTrue);
ブール値が初期化されていないため、コンパイル時エラーが発生するはずです。デフォルトでは、これを初期化しようとするとfalseに設定されます。