2
votes

Impossible de définir explicitement le champ booléen sur null

J'ai ceci:

  public static class RaceParam {

    boolean keep;

  }

qui ne se compilera pas car vous ne pouvez pas affecter null à une primitive. Donc, cela soulève la question, quelle valeur conserve-t-elle quand nous faisons cela:

  public static class RaceParam {

    boolean keep = null; // does not compile

  }

est-il par défaut faux ou vrai? Semble dangereux de choisir quelque chose par défaut.


9 commentaires

Classe wrapper utilisateur si vous souhaitez définir null. utilisez Boolean au lieu de boolean.


Oui, il est (potentiellement) dangereux de s'appuyer sur la valeur par défaut d'une primitive. Vous devez attribuer une valeur par défaut explicite si possible. Concernant le problème null , vous pouvez utiliser un champ Boolean à la place.


@TimBiegeleisen bien sûr mais quelle est la valeur par défaut d'un booléen primitif? :)


Pas d'accord, il est «dangereux» de se fier aux valeurs par défaut. Les valeurs par défaut en Java sont bien définies. Ils sont nuls pour toutes les primitives sauf boolean , qui est false . Pour les références, c'est null .


@MrCholo C'est faux .


@markspace Je suis d'accord, mais d'un point de vue de logique métier, il peut parfois être plus sûr de toujours attribuer explicitement une valeur par défaut.


@MichaWiedenmann L ' original actuellement lié de ce duplicata semble être différent de celui que vous avez cité. Cette question ici est en effet un double de l'original actuellement lié.


@MichaWiedenmann Le seul endroit où j'ai vu la phrase "Quelle est la valeur par défaut de bool?" est dans vos commentaires. Je ne sais pas d’où vous venez. Je soupçonnais que quelqu'un quelque part avait changé quelque chose, d'où mon commentaire pour vous informer des conditions actuelles. Cette question et son original lié demandent pourquoi nous ne pouvons pas attribuer null à une primitive booléenne.


@BasilBourque Ah, d'accord, je pense que je vous ai maintenant. 1. Désolé, bool est une faute de frappe aurait dû être booléen. 2. OP déclare comme un fait que vous ne pouvez pas attribuer null, il semble le savoir et il ne le demande pas. Au lieu de cela, OP demande: "Cela pose la question, quelle valeur conserve-t-elle quand nous faisons cela:"


3 Réponses :


5
votes

booléen vaut par défaut false

boolean est une primitive et ne peut contenir que les valeurs true ou faux . La valeur par défaut est false.

Boolean keep = null;

Utilisez la classe wrapper Boolean si vous voulez attribuer une valeur nulle. Par exemple:

boolean keep;  // Defaults to `false`.


4 commentaires

cela ne répond pas à la question tho, je me demande quelle est la valeur par défaut pour le champ de conservation s'il n'est pas explicitement assigné à null..et le raisonnement derrière cela si possible.


Mise à jour de la réponse. La valeur par défaut est false.


@MrCholo Pour être honnête, vous n'avez pas demandé ce qui arrive à un champ booléen qui ne reçoit rien non plus.


@Jai MrCholo a toujours raison!



3
votes

Depuis jls 4.12 .5. Valeurs initiales des variables :

Chaque variable de classe, variable d'instance ou composant de tableau est initialisé avec une valeur par défaut lors de sa création

Pour le type booléen, la valeur par défaut est false.


0 commentaires

-1
votes

La valeur par défaut de Boolean keep est nulle, comme tout autre objet. Vous devez l'initialiser explicitement.


1 commentaires

La question concerne boolean la primitive et non boolean la classe.