Valeur par défaut de «booléen» et «booléen» en Java

260

Quelles sont les valeurs par défaut de boolean(primitive) et Boolean(wrapper primitif) en Java?

Makky
la source

Réponses:

511

La valeur par défaut d'un Boolean(objet) est null.
La valeur par défaut pour une boolean(primitive) est false.

Prince John Wesley
la source
5
veuillez ajouter le lien
très
390

La valeur par défaut de any Object, comme Boolean, est null.

La valeur par défaut de a booleanest false.

Remarque: Chaque primitive a une classe wrapper. Chaque wrapper utilise une référence dont la valeur par défaut est null. Les primitives ont différentes valeurs par défaut:

boolean -> false

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

float, double -> 0.0

Remarque (2): void a un wrapper Voidqui a également une valeur par défaut nullet est sa seule valeur possible (sans utiliser de hacks).

Peter Lawrey
la source
2
Je pense que l' on pourrait parler Booleanest Object, cela ferait la première ligne signification évidente. Cela semble assez basique, mais pour quelqu'un qui pose une question de base comme celle-ci, cela peut aider.
Suma
23

booléen
Peut être trueou false.
La valeur par défaut est false.

(Source: Variables primitives Java )

Boolean
Peut être un Booleanobjet représentant trueou false, ou peut être null.
La valeur par défaut est null.

Bastardo
la source
17

Si vous devez demander, vous devez initialiser explicitement vos champs / variables, car si vous devez les rechercher, il y a de fortes chances que quelqu'un d'autre ait besoin de le faire également.

La valeur d'une primitive booleanest fausse comme on peut le voir ici .

Comme mentionné par d'autres, la valeur de a Booleansera nulle par défaut.

Peter Tillemans
la source
Merci de faire référence à une source officielle. Quant à l'initialisation, il n'est pas nécessaire de compenser un manque de connaissances.
LoBo
2
Le «manque de connaissances» implique qu'il existe un certain niveau auquel comparer. Si ce niveau de connaissance minimal est clair, je suis d'accord. Sinon, je trouve prudent de me tromper en étant plus explicite. En tout, c'est une décision / opinion plutôt personnelle / d'équipe.
Peter Tillemans
4
@LoBo - Je pense qu'il n'y a rien de mal à compenser un manque potentiel de connaissances. Vous ne savez pas qui conservera votre code sur toute la ligne. Tout ce qui rend votre code plus facile à comprendre et / ou lisible, tout en ayant peu d'impact sur les performances, ne peut être qu'une bonne chose.
ferekdoley
9

Boolean est un objet. Donc, si c'est une variable d'instance, elle sera nulle. S'il est déclaré dans une méthode, vous devrez l'initialiser, ou il y aura une erreur de compilation.

Si vous déclarez comme primitif, c'est-à-dire booléen. La valeur sera fausse par défaut s'il s'agit d'une variable d'instance (ou d'une variable de classe). S'il est déclaré dans une méthode, vous devrez toujours l'initialiser à true ou false, ou il y aura une erreur de compilation.

planetjones
la source
6

Un Booleanmembre non initialisé (en fait une référence à un objet de type Boolean) aura la valeur par défaut de null.

Un booleanmembre non initialisé (primitif) aura la valeur par défaut de false.

codaddict
la source
4

Il n'y a pas de valeur par défaut pour Boolean. Booleandoit être construit avec un booleanou un String. Si l'objet n'est pas initialisé, il pointerait vers null.

La valeur par défaut de primitive booleanest false.

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

Rabbin furtif
la source
Je pense que ces 3 downvotes sont parce que vous dites "il n'y a pas de défaut" qui est une déclaration assez peu claire. Comme vous le dites, une référence d'objet non initialisé pointe vers null. nullest la valeur par défaut, donc je ne sais pas à quoi vous faites référence lorsque vous dites qu'il n'y en a pas. (Vouliez-vous dire quelque chose comme " Booleann'est trueni falsepar défaut"?)
Radiodef
Oui, ce que vous mettez est plus précis. Il existe déjà une réponse acceptée qui est plus concise. Je ne suis pas sûr de ce qui est gagné à la fois en rétrogradant un message et en le modifiant.
Stealth Rabbi
1
Pour clarifier, je n'ai pas downvote et mon montage n'a rien à voir avec mon commentaire. Je recommanderais de modifier la réponse si vous approuvez cette formulation suggérée, puis nous pourrons supprimer nos commentaires pour nettoyer.
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;
    }
}

production:

primitive: false
object: null

Cela semble évident, mais j'ai eu une situation où Jackson, tout en sérialisant un objet en JSON, lançait un NPE après avoir appelé un getter, tout comme celui-ci, qui renvoie un booléen primitif qui n'a pas été attribué. Cela m'a amené à croire que Jackson recevait un nul et essayait d'appeler une méthode dessus, d'où le NPE. J'avais tort.

La morale de l'histoire est que lorsque Java alloue de la mémoire à une primitive, cette mémoire a une valeur même si elle n'est pas initialisée, ce que Java équivaut à false pour un booléen. En revanche, lors de l'allocation de mémoire à un objet complexe non initialisé comme un booléen, il alloue uniquement de l'espace pour une référence à cet objet, pas à l'objet lui-même - il n'y a aucun objet en mémoire auquel se référer - donc la résolution de cette référence se traduit par null.

Je pense qu'à proprement parler, "par défaut à faux" est un peu hors de propos. Je pense que Java n'alloue pas la mémoire et ne lui affecte pas la valeur false jusqu'à ce qu'elle soit explicitement définie; Je pense que Java alloue la mémoire et quelle que soit la valeur de la mémoire est la même que la valeur de «faux». Mais pour des raisons pratiques, c'est la même chose.

snakedog
la source