Was ist der dritte Boolesche Staat in Java?
Frage
Ich weiß zwar, dass ein Booleschen per Definition nur aus zwei Staaten besteht, wahr oder falsch. Ich habe mich gefragt, welchen Wert ein Boolescher hat, bevor er mit einem dieser Zustände initialisiert wird.
Lösung
Bearbeiten: Durch beliebte Nachfrage:
Es sei denn, Sie verwenden das verpackte Boolesche, was standardmäßig null ist. - Sudhir.j
Andere Tipps
Wenn es sich um eine lokale Variable handelt, handelt es sich um einen Compiler -Fehler, um sie zu verweisen, bevor es initialisiert wurde. Wenn es sich um ein Feld handelt, wird es auf False initialisiert.
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);
}
}
Ausgänge
false
null
Ich weiß, dass dies eine philosophische für eine Frage war, aber dank des Autoboxens können Sie Java als eine fast wirklich oo -Sprache verwenden (ich hasse es, primitive Typen zu haben ... nur dann, wenn es auch umgekehrt funktionieren würde). Es ändert jedoch das Verhalten, wenn Sie ein Objekt verwenden (zum besseren IMO).
Es gibt keinen dritten Staat. Wie @yishai sagte, wenn Sie keinen Wert zuweisen, stand der Booleschen Fields an False. Lokale Variablen müssen vor der Verwendung zugewiesen werden:
Der Zugriff auf eine nicht initialisierte lokale Variable führt zu einem Kompilierzeitfehler
Sehen der Arzt.
In Java Boolean Typen standardmäßig falsch.
FYI, boolean standardmäßig zu falschen, primitiven Zahlen standardmäßig 0, 0L, 0F oder 0d, char standardmäßig von ' 0', Objektreferenzen (z. B. boolean) standardmäßig Null.
Dies gilt auch für den Inhalt von Arrays. (Ein gewöhnlicher Gotcha ist, dass eine Reihe von Objekten zunächst voller Nullwerte ist)
es ist FALSCH
Wenn Sie so etwas hatten wie
boolean isTrue;
System.out.println(isTrue);
Sie sollten einen Kompilierungszeitfehler bekommen, da der Boolesche nicht initialisiert wurde. Wenn Sie dies standardmäßig versuchen, dies zu initialisieren, wird es auf false festgelegt.