Boolean vs booléen en Java
Il y a des discussions autour de Integer
vs int
en Java. La valeur par défaut de l'ancien est null
tandis que dans le second c'est 0
. Que diriez - Boolean
vs boolean
?
Une variable dans mon application peut avoir 0
/1
valeurs. Je voudrais utiliser boolean
/Boolean
et préfèrent ne pas utiliser int
. Puis-je utiliser Boolean
/boolean
à la place?
- Pour la conception du système de raisons, j'ai choisi de Booléenne car il a l'option "L'utilisateur n'a pas à décider encore" qui n'est ni égal à égal avec les "vrais", ni "faux". Je voudrais utiliser boolean primitives que dans les cas si je suis sûr à 100% vrai/faux options sont assez. Dans la base de données NULL option est généralement disponible sans problème (ou en supprimant simplement PAS NULL restrictions plus tard sur demande)
- Réplique exacte de la What est la différence entre booléen Booléen en Java? (parce que GWT ne fait pas de différence).
Vous devez vous connecter pour publier un commentaire.
Oui vous pouvez utiliser
Boolean
/boolean
à la place.Premier est l'Objet et le second est de type primitif.
Sur la première, vous obtiendrez plus de méthodes qui vous seront utiles.
Deuxième est bon marché compte tenu de la mémoire de frais La seconde vous permettra d'économiser beaucoup plus de mémoire, alors allez-y
Maintenant, choisissez votre chemin.
AsyncTask
, vous ne pouvez utiliserBoolean
au lieu deboolean
.true
,false
etnull
où un booléen a la logique des 2 états (true
etfalse
)if (!value) {}
Boolean
enveloppements le booléen de type primitif. Dans le JDK 5 et vers le haut, Oracle (ou au Soleil avant d'Oracle acheté) introduit l'autoboxing/unboxing, qui, pour l'essentiel, il permet de faire ceou
Qui est essentiellement le compilateur ne,
Donc, pour votre réponse, c'est OUI.
Boolean
à unboolean
. Si votreBoolean
estnull
et vous essayez de l'attribuer à unboolean
, il va lancer uneNullPointerException
au moment de l'exécution.Boolean
une classe, alors pourquoi la valeur est toujours faux, même si j'ai changé la valeur d'une autre classe de référencement à la même variable Booléenne? quel est le point de cetteBoolean
alors si nous ne pouvons pas référence à partir de différentes classes d'instance / passer comme argument?AtomicBoolean
et de référence à partir de la différence de classesJe suis un peu l'extension fourni des réponses (car jusqu'à présent, ils se concentrent sur leur "propre"/artificiel de la terminologie en se concentrant sur la programmation d'une langue en particulier, au lieu de s'occuper de la plus grande image derrière la scène de de la création de l'langages de programmation, en général, c'est à dire quand les choses comme type de sécurité contre la mémoire des considérations de faire la différence):
int n'est pas booléenne
Envisager
avec sortie
Code Java sur la 3e ligne
(bar)?1:0
montre que bar (boolean) ne peut pas être implicitement converti (coulé) dans un int. Je vais de ce pas pour illustrer les détails de mise en œuvre derrière la JVM, mais de constater qu'en termes de faible niveau considérations (comme la taille de la mémoire) on ne fait préférer des valeurs de type de sécurité. Surtout si ce type de sécurité n'est pas vraiment/entièrement utilisé que dans les types boolean, où les contrôles sont faits en forme deTout juste à l'état que {0,1} < { -2^31, .. , 2^31 -1}. Semble exagéré, non? Type de la sécurité qui est vraiment important dans les types définis par l'utilisateur, pas de conversion implicite de primitives (bien que les derniers sont inclus dans le premier).
Octets ne sont pas des types ou des bits
Noter que dans la mémoire de votre variable de gamme de {0,1} occupera encore au moins un octet ou un mot (xbits en fonction de la taille du registre), sauf spécialement pris en charge (par exemple, joliment emballé dans la mémoire - 8 "boolean" bits 1 octet - et-vient).
En préférant la sécurité de type (comme d'/conditionnement valeur dans une case d'un type particulier) sur la valeur supplémentaire d'emballage (par ex. à l'aide de peu de postes ou de l'arithmétique), on n'a effectivement choisit d'écrire moins de code sur gagner plus de mémoire. (Sur l'autre main, on peut toujours définir un personnalisé du type d'utilisateur qui permettra de faciliter la conversion n'en vaut pas que Boolean).
mot-clé vs type
Enfin, votre question est au sujet de la comparaison mot-clé vs type. Je crois qu'il est important d'expliquer pourquoi ou comment exactement vous obtiendrez des performances à l'aide de/préférant les mots-clés ("marqué" comme primitive) sur les types (normal composite définissables par l'utilisateur classes à l'aide d'un autre mot-clé classe)
ou en d'autres termes
vs
La première "chose" (type) ne peut pas être prolongé (sous-classé) et pas sans raison. Effectivement Java terminologie de primitive et emballage classes peuvent être simplement traduit en inline valeur (un LITTÉRAL ou une constante qui obtient directement remplacé par le compilateur lorsqu'il est possible de déduire de la substitution, ou si ce n'est pas toujours de secours dans l'emballage de la valeur).
Optimisation est obtenue en raison triviale:
C'est pourquoi, lorsque le réel de l'inférence de type est fait, il peut (encore) la fin de l'instanciation d'emballage de classe avec toutes les informations de type si nécessaire (ou de la conversion/moulage en exemple).
Donc, la différence entre boolean et Boolean est exactement dans Compilation et Runtime (un peu loin mais c'est presque comme instanceof vs getClass()).
Enfin, l'autoboxing est plus lent que les primitives
Remarque le fait que Java peut faire l'autoboxing est juste un "sucre syntaxique". Il ne permet pas d'accélérer quoi que ce soit, permet d'écrire moins de code. C'est tout. Moulage et d'emballage dans les informations de type de conteneur est toujours pratiquée. Pour des raisons de performances, choisissez l'arithmétique qui sera toujours ignorer un service de ménage supplémentaire de créer des instances de classe avec des informations de type pour mettre en œuvre le type de sécurité. Manque de de sécurité de type est le prix à payer pour le gain de performance. Pour le code avec boolean-valeur des expressions de type de sécurité (lorsque vous écrivez moins et donc implicite code) serait critique par exemple, pour si-alors-sinon de flux de contrôle.
Vous pouvez utiliser le Les constantes booléennes -
Boolean.TRUE
etBoolean.FALSE
au lieu de0
et1
. Vous pouvez créer votre variable de typeboolean
si primitive est ce que vous êtes après. De cette façon, vous n'aurez pas à créer de nouveauxBoolean
objets.Fondamentalement boolean représentent un type de données primitif où Boolean représentent une référence de type de données. cette histoire a commencé lorsque Java voulez devenir purement orienté objet, il est fourni wrapper notion de classe pour venir à l'utilisation de type de données primitif.
b1
etb2
ne sont pas les mêmes.Une observation: (même si cela peut être considéré effet secondaire)
boolean étant une primitive peut soit dire oui ou non.
Boolean est un objet (il peut désigner soit oui ou non ou "ne sait pas", c'est à dire nulle)
Vous pouvez utiliser Boolean /boolean. La simplicité est le chemin à parcourir.
Si vous n'avez pas besoin spécifique de l'api (les Collections, les Ruisseaux, etc.) et vous n'êtes pas prévoir que vous aurez besoin - utiliser la version primitive de (boolean).
Avec des primitives de vous garantir que vous ne passerez pas les valeurs null.
Vous ne serez pas tomber dans les pièges de ce genre. Le code ci-dessous jette NullPointerException (à partir de: Les booléens, opérateurs conditionnels et l'autoboxing):
public static void main(String[] args) throws Exception {
Boolean b = true ? returnsNull() : false; //NPE on this line.
System.out.println(b);
}
public static Boolean returnsNull() {
return null;
}
Utilisation Boolean lorsque vous avez besoin d'un objet, par exemple: