web-dev-qa-db-fra.com

Quelle est la différence entre Boolean.TRUE et true en Java?

PS: Je comprends la différence entre "vrai" et vrai.

Edit: Je comprends aussi que Boolean.TRUE est un wrapper pour la primitive true, ma question est alors: pourquoi la primitive boolean accepte-t-elle Boolean.TRUE comme valeur? Par exemple,

boolean boolVar = Boolean.TRUE;

semble être une déclaration valide.

25
user183037

La raison

boolean boolVar = Boolean.TRUE;

works est dû à autounboxing , une fonctionnalité Java 5 qui permet à un objet wrapper d’être automatiquement converti en son équivalent primitif lorsque cela est nécessaire. Le contraire, la sélection automatique , est également possible:

Boolean boolVar = true;
28
ColinD

Comme indiqué dans les réponses précédentes, Boolean.TRUE renvoie l'objet wrapper de la valeur booléenne true. Ainsi, pour les contextes dans lesquels nous devons traiter des objets semblables à des booléens (par exemple, ayant une ArrayList de booléens), nous pourrions utiliser Boolean.TRUE ou Boolean.FALSE.

Quant à pourquoi:

boolean boolVar = Boolean.TRUE;

est valide à cause de Autoboxing et Unboxing

En bref, le compilateur Java, quand il vous voit traiter une primitive comme un objet, tel que

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(someBool);

il va automatiquement l'envelopper, ou autobox il

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(Boolean.valueOf(someBool));

Et s'il vous voit traiter un objet wrapper, tel que Boolean.TRUE, comme une primitive, comme ceci:

boolean boolVar = Boolean.TRUE;

il le convertira en primitive, ou unbox, comme si nous le faisions:

boolean boolVar = Boolean.TRUE.booleanValue();

Il était une fois, vous deviez le faire à la main, mais maintenant, pour le meilleur ou pour le pire, ceci est principalement pris en charge pour vous.

Et si vous vous demandez pourquoi avoir Boolean.TRUE du tout, c'est qu'il n'est pas nécessaire de flotter autour de nombreux objets booléens pour true. Puisqu’un booléen ne peut être qu’une des deux valeurs, il est plus simple de les avoir comme constantes plutôt que, à chaque fois que l’on a besoin de boxed up true:

Boolean trueBool = new Boolean(true); 
25
Zach L

Boolean.TRUE est un objet wrapper et singleton. vrai est une constante littérale. Ci-dessous deux situations dans lesquelles j'utilise des wrappers sur des primitives

  1. Je veux les stocker dans des collections
  2. Je voudrais avoir une notion de null . Un booléen primitif ne peut représenter que deux états.
6
Aravind R. Yarram

true est du type primitif boolean tandis que Boolean.TRUE est un Boolean object qui englobe la valeur true.

3
casablanca

Les types primitifs (par exemple boolean) sont fortement préférés aux classes (par exemple Boolean) pour un certain nombre de raisons. Voir la discussion ici. https://softwareengineering.stackexchange.com/questions/203970/when-to- use-primitive-vs-class-in-Java . Le type primitif rend le code plus lisible, empêche les erreurs de pointeur, telles que if(a==b) vs if(a.equals(b)), augmente les performances et suit la conversion.

Il existe un cas où Boolean ou Integer fonctionne mieux que boolean et int. C’est le cas si vous souhaitez autoriser null comme valeur. Il en résulte un certain nombre de contrôles nuls, mais empêche le passage de false lorsque 

1
sixtytrees

Boolean.TRUE est une référence à un objet de la classe Boolean, alors que true est simplement une valeur du type booléen primitif. Les classes telles que Boolean sont souvent appelées "classes wrapper" et sont utilisées lorsque vous avez besoin d'un objet au lieu d'un type primitif (par exemple, si vous le stockez dans une structure de données).

0
Chris Smith

Vous pouvez également obtenir une explication sur le lien de Wikipedia ci-dessous.

Toutes les classes de wrapper primitives en Java sont immuables. J2SE 5.0 a introduit la substitution automatique de types primitifs dans leur objet wrapper et la déconnexion automatique des objets wrapper dans leur valeur primitive - la conversion implicite entre les objets wrapper et les valeurs primitives.

Plus d'informations sur http://en.wikipedia.org/wiki/Primitive_wrapper_class

0
Willy Makend