J'ai donc entendu dire que si je compare 2 chaînes avec == alors je ne reviendrai que si elles se réfèrent toutes deux au même objet/instance. Ce sont des chaînes. Et les booléens?
== vérifie-t-il l'égalité complète dans les booléens? - Java
Cela dépend si vous parlez de Boolean
s (l'encapsuleur d'objet, notez la majuscule B
) ou boolean
s (la primitive, notez la minuscule b
). Si vous parlez de Boolean
s (l'encapsuleur d'objets), comme pour tous les objets, ==
Vérifie identité, pas équivalence. Si vous parlez de boolean
s (primitives), il vérifie l'équivalence.
Donc:
Boolean a, b;
a = new Boolean(false);
b = new Boolean(false);
System.out.println("a == b? " + (a == b)); // "a == b? false", because they're not the same instance
Mais
boolean c, d;
c = false;
d = false;
System.out.println("c == d? " + (c == d)); // "c == d? true", because they're primitives with the same value
Concernant les cordes:
J'ai entendu dire que si je compare 2 chaînes avec ==, je ne reviendrai que si les chaînes sont identiques et qu'elles se réfèrent toutes deux au même objet/instance ...
Ce n'est pas vraiment un "et": ==
Va seulement vérifier si les deux String
variables font référence à la même String
instance. Bien sûr, une instance String
ne peut avoir qu'un seul ensemble de contenu, donc si les deux variables pointent vers la même instance, naturellement le contenu est le même ... :-) Le point clé est que ==
signalera false
pour différentString
instances même si elles ont les mêmes caractères dans le même ordre. C'est pourquoi nous utilisons equals
sur eux, pas ==
. Les chaînes peuvent devenir un peu déroutantes à cause de intern
ing , qui est spécifique aux chaînes (il n'y a pas d'équivalent pour Boolean
, bien que lorsque vous utilisez Boolean.valueOf(boolean)
, vous obtiendrez un objet mis en cache). Notez également que Java n'a pas de chaînes primitives comme il en a primitif boolean
, int
, etc.
Si vous avez un objet, l'utilisation est égale, sinon vous pouvez exécuter des choses comme celle-ci. (Cache VM pour les primitives d'autoboxing)
public static void main(String[] args){
Boolean a = true;
Boolean b = true;
System.out.println(a == b);
a = new Boolean(true);
b = new Boolean(true);
System.out.println(a == b);
}
la sortie est TRUE et FALSE
Cela dépend si vous parlez de types de valeurs comme: int
, boolean
, long
ou des types de référence: Integer
, Boolean
, Long
. les types de valeurs peuvent être comparés à ==
, les types de référence doivent être comparés à equals
.
Lorsque vous utilisez (==) avec des booléens,
Si l'un des opérandes est un wrapper booléen, il est d'abord déballé dans une primitive booléenne et les deux sont comparés.
Si les deux sont des wrappers booléens, créés avec le mot-clé 'new', leurs références sont comparées comme dans le cas d'autres objets. new Boolean("true") == new Boolean("true")
est faux
Si les deux sont des wrappers booléens, créés sans le mot-clé "new",
Boolean a = false;
Boolean b = Boolean.FALSE;
// (a==b) return true