Standardwert von 'boolean' und 'Boolean' in Java

260

Was sind die Standardwerte von boolean(primitiv) und Boolean(primitiv Wrapper) in Java?

Makky
quelle

Antworten:

511

Der Standardwert für ein Boolean(Objekt) ist null.
Der Standardwert für a boolean(primitiv) ist false.

Prinz John Wesley
quelle
5
bitte offizielle Quelle hinzufügen Link
sehr
390

Der Standardwert für jede Object, wie Booleanist null.

Der Standardwert für a booleanist false.

Hinweis: Jedes Grundelement verfügt über eine Wrapper-Klasse. Jeder Wrapper verwendet eine Referenz mit dem Standardwert null. Grundelemente haben unterschiedliche Standardwerte:

boolean -> false

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

float, double -> 0.0

Hinweis (2): void hat einen Wrapper, Voidder ebenfalls den Standardwert hat nullund nur ein möglicher Wert ist (ohne Verwendung von Hacks).

Peter Lawrey
quelle
2
Ich denke , man könnte erwähnen Booleanist Object, das wäre die erste Linie bedeutet offensichtlich machen. Das klingt ziemlich einfach, aber für jemanden, der eine grundlegende Frage wie diese stellt, kann es hilfreich sein.
Suma
23

boolean
Kann sein trueoder false.
Standardwert ist false.

(Quelle: Java Primitive Variables )

Boolean
Kann ein BooleanObjekt sein, das trueoder darstellt false, oder kann sein null.
Standardwert ist null.

Bastardo
quelle
17

Wenn Sie fragen müssen, müssen Sie Ihre Felder / Variablen explizit initialisieren, denn wenn Sie nachschlagen müssen, muss dies wahrscheinlich auch jemand anderes tun.

Der Wert für ein Grundelement booleanist falsch, wie hier zu sehen ist .

Wie von anderen erwähnt, ist der Wert für a Booleanstandardmäßig null.

Peter Tillemans
quelle
Vielen Dank für den Verweis auf die offizielle Quelle. Bei der Initialisierung muss ein Mangel an Wissen nicht ausgeglichen werden.
LoBo
2
"Mangel an Wissen" impliziert, dass es ein erwartetes Niveau gibt, mit dem man vergleichen kann. Wenn dieser minimale Wissensstand klar ist, stimme ich zu. Wenn nicht, finde ich es klug, sich zu irren, wenn man expliziter ist. In all dem ist dies eine eher persönliche / Teamentscheidung / Meinung.
Peter Tillemans
4
@LoBo - Ich denke, es ist nichts Falsches daran, einen möglichen Mangel an Wissen auszugleichen. Sie wissen nicht, wer Ihren Code später pflegen wird. Alles, was Ihren Code leichter verständlich und / oder lesbarer macht, während es nur geringe Auswirkungen auf die Leistung hat, kann nur eine gute Sache sein.
Ferekdoley
9

Boolean ist ein Objekt. Wenn es sich also um eine Instanzvariable handelt, ist sie null. Wenn es innerhalb einer Methode deklariert ist, müssen Sie es initialisieren, da sonst ein Compilerfehler auftritt.

Wenn Sie als primitiv deklarieren, dh boolesch. Der Wert ist standardmäßig falsch, wenn es sich um eine Instanzvariable (oder Klassenvariable) handelt. Wenn es innerhalb einer Methode deklariert ist, müssen Sie es weiterhin entweder auf true oder false initialisieren, da sonst ein Compilerfehler auftritt.

planetjones
quelle
6

Ein nicht initialisiertes BooleanMitglied (eigentlich ein Verweis auf ein Objekt vom Typ Boolean) hat den Standardwert null.

Ein nicht initialisiertes boolean(primitives) Mitglied hat den Standardwert false.

Codaddict
quelle
4

Es gibt keine Standardeinstellung für Boolean. Booleanmuss mit a booleanoder a konstruiert werden String. Wenn das Objekt nicht initialisiert ist, würde es auf zeigen null.

Der Standardwert des Grundelements booleanist false.

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

Stealth Rabbi
quelle
Ich denke, diese 3 Abstimmungen sind, weil Sie sagen "es gibt keinen Standard", was eine ziemlich unklare Aussage ist. Wie Sie sagen, verweist eine nicht initialisierte Objektreferenz auf null. nullist die Standardeinstellung, daher bin ich mir nicht sicher, worauf Sie sich beziehen, wenn Sie sagen, dass es keine gibt. (Meinten Sie vielleicht etwas wie " Booleanist weder truenoch falsestandardmäßig"?)
Radiodef
Ja, was Sie sagen, ist genauer. Es gibt bereits eine akzeptierte Antwort, die präziser ist. Ich bin mir nicht sicher, was durch das Herunterstimmen und Bearbeiten eines Posts erreicht wird.
Stealth Rabbi
1
Zur Verdeutlichung habe ich nicht abgelehnt und meine Bearbeitung hatte nichts mit meinem Kommentar zu tun. Ich würde empfehlen, die Antwort zu bearbeiten, wenn Sie dieser vorgeschlagenen Formulierung zustimmen. Dann können wir unsere Kommentare löschen, um sie zu bereinigen.
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;
    }
}

Ausgabe:

primitive: false
object: null

Dies scheint offensichtlich, aber ich hatte eine Situation, in der Jackson beim Serialisieren eines Objekts in JSON eine NPE auslöste, nachdem er einen Getter wie diesen aufgerufen hatte, der einen primitiven Booleschen Wert zurückgibt, der nicht zugewiesen wurde. Dies führte mich zu der Annahme, dass Jackson eine Null erhielt und versuchte, eine Methode darauf aufzurufen, daher die NPE. Ich lag falsch.

Die Moral der Geschichte ist, dass wenn Java Speicher für ein Primitiv zuweist, dieser Speicher einen Wert hat, auch wenn er nicht initialisiert ist, was Java für einen Booleschen Wert mit false gleichsetzt. Im Gegensatz dazu wird beim Zuweisen von Speicher für ein nicht initialisiertes komplexes Objekt wie einen Booleschen Wert nur Speicherplatz für eine Referenz auf dieses Objekt zugewiesen, nicht für das Objekt selbst - es gibt kein Objekt im Speicher, auf das Bezug genommen werden kann. Wenn Sie also diese Referenz auflösen, erhalten Sie null.

Ich denke, dass "standardmäßig falsch" ein wenig daneben liegt. Ich denke, Java weist den Speicher nicht zu und weist ihm den Wert false zu, bis er explizit festgelegt wird. Ich denke, Java weist den Speicher zu und jeder Wert, den dieser Speicher hat, ist der gleiche wie der Wert von 'false'. Aber aus praktischen Gründen sind sie dasselbe.

Schlangenhund
quelle