N' == vérifiez la pleine égalité dans les Booléens? - Java
Donc j'ai entendu dire que si je compare 2 chaînes avec ==, alors je vais seulement obtenir vrai si les deux se réfèrent au même objet/de l'instance. Qui est les chaînes. Qu'en est Booléens?
- Comment les chaînes reportez-vous à la même instance et ne pas être identique?
- Non, ce que je veux dire est que si ils sont identiques, mais ne renvoient pas à la même instance, == renvoie la valeur false.
- Veuillez lire quoi que ce soit avant de poster, et n'ont pas au départ, j'ai entendu quelque chose quelque part.
- J'ai entendu dire que = je sais que dans le cas ci-dessus. Pas dire que vous devriez savoir que, mais juste clarifier.
Vous devez vous connecter pour publier un commentaire.
Cela dépend si vous parlez
Boolean
s (l'objet wrapper, note la capitaleB
) ouboolean
s (le primitif, la note la plus faible de casb
). Si vous parlezBoolean
s (l'objet wrapper), comme avec tous les objets,==
vérifie identité, pas équivalence. Si vous parlezboolean
s (primitives), il vérifie l'équivalence.Donc:
Mais
Concernant chaînes:
Ce n'est pas vraiment un "et":
==
sera seulement de vérifier si les deuxString
variables se rapportent à la mêmeString
instance. Bien sûr, onString
instance ne peut avoir qu'un ensemble de contenus, de sorte que si les deux variables pointent vers la même instance, naturellement, le contenu est le même... 🙂 Le point clé est que==
fera rapportfalse
pour différentsString
cas, même si elles ont les mêmes caractères dans le même ordre. C'est pourquoi nous utilisonsequals
sur eux, pas==
. Les chaînes peuvent être un peu déroutant à cause destagiaire
ing, qui est spécifique à cordes (il n'y a pas d'équivalent pourBoolean
, bien que lorsque vous utilisezBoolean.valueOf(boolean)
, vous obtiendrez un objet mis en cache). Notez également que Java n'a pas de primitive cordes, comme il le fait primitifboolean
,int
, etc.new boolean
pour faire ma variable, par opposition ànew Boolean
,==
sera le même queequals()
?new boolean
(inférieure) à tous. Vous utiliseztrue
oufalse
ou le résultat d'une opération de comparaison. Je pense qu'il y a très peu de cas d'utilisation moderne de Java pourBoolean
.boolean myBoolean = true
?boolean myBoolean = false;
ou tout simplementboolean myBoolean;
si vous ne voulez pas l'initialiser sous plus tard. Primitives n'ont pas besoin d'être construit (ainsi, tout commeint n = 5;
ou tout simplementint n;
,boolean b = false;
ou tout simplementboolean b;
).Boolean
vous devriez ne jamais appelernew Boolean
, mais au lieu d'utiliserBoolean.TRUE
respectivementBoolean.FALSE
. Si vous suivez cette règle, vous pouvez réellement les comparer avec==
(bien que vous avez probablement encore ne devrait pas).Boolean.compare(x,y)==0
partout, à droite?sed
regex (j'utilise secRefactorInFiles.sh), donc je ne vais pas être la vérification de chaque, et il suffit de tester si l'application fonctionne toujours, mais je crois que l'application fonctionne de mieux en évitant le b1=b2=confusion. Obs.: mon code a des normes, comme les booléens commencent par "b", donc la regex ne fonctionne plus correctement.Si vous avez un Objet l'utilisation d'égal à égal,
lorsque vous pouvez exécuter dans des choses comme ça.
(VM cache pour l'autoboxing primitives)
la sortie est le VRAI et le FAUX
Cela dépend si vous parlez de la valeur des types comme:
int
,boolean
,long
ou sur les types de référence:Integer
,Boolean
,Long
. types de valeur pourrait être comparé à==
, les types de référence doit être comparé avecequals
.Lors de l'utilisation ( == ) avec des valeurs booléennes,
Si l'un des opérandes est un Booléen wrapper,alors il est d'abord unboxed
dans un booléen primitive, et les deux sont comparés.
Si les deux sont Boolean wrappers,créé avec "nouveau" mot-clé, puis leur
les références sont contre, tout comme dans le cas d'autres objets.
new
est fauxBoolean("true") == new Boolean("true")
Si les deux sont Boolean wrappers,créée sans le "nouveau" mot-clé,