Tester avec la classe wrapper Boolean
Dans l'étape précédente, nous avons travaillé avec le type primitif boolean
. Java dispose également d'une classe wrapper correspondante appelée Boolean
. Les classes wrapper offrent un moyen d'utiliser les types de données primitifs sous forme d'objets. Cela est particulièrement utile lorsqu'on travaille avec des collections ou lorsqu'il est nécessaire de représenter une valeur booléenne qui peut être null
.
La classe Boolean
possède deux objets prédéfinis pour les valeurs booléennes : Boolean.TRUE
et Boolean.FALSE
. Ce sont des objets constants représentant respectivement les valeurs booléennes true
et false
.
Lorsqu'on travaille avec des objets Boolean
, on peut toujours utiliser l'opérateur d'égalité ==
pour les comparer. Cependant, il est important de comprendre le fonctionnement de ==
avec les objets. Pour les objets, ==
vérifie si les deux variables font référence au même objet exact en mémoire, et non seulement si elles ont la même valeur.
Modifions notre programme pour utiliser la classe wrapper Boolean
et observons le comportement de l'opérateur d'égalité.
-
Ouvrez le fichier HelloJava.java
dans l'éditeur WebIDE.
-
Remplacez le code par le suivant :
public class HelloJava {
public static void main(String[] args) {
Boolean isJavaFunObject = Boolean.TRUE;
if (isJavaFunObject == Boolean.TRUE) {
System.out.println("Java is fun (using Boolean.TRUE)!");
} else {
System.out.println("Java is not fun (using Boolean.TRUE).");
}
Boolean anotherBooleanObject = true; // Autoboxing
if (anotherBooleanObject == Boolean.TRUE) {
System.out.println("Another boolean object is true!");
} else {
System.out.println("Another boolean object is not true.");
}
}
}
Examinons les modifications :
Boolean isJavaFunObject = Boolean.TRUE;
: Nous déclarons une variable de type Boolean
et lui assignons la constante Boolean.TRUE
.
if (isJavaFunObject == Boolean.TRUE)
: Nous utilisons l'opérateur d'égalité ==
pour comparer notre objet Boolean
avec la constante Boolean.TRUE
. Étant donné que isJavaFunObject
est assigné à Boolean.TRUE
, ils font référence au même objet, donc cette condition sera true
.
Boolean anotherBooleanObject = true;
: Cette ligne illustre l'"autoboxing". Java convertit automatiquement la valeur primitive boolean
true
en un objet Boolean
.
if (anotherBooleanObject == Boolean.TRUE)
: Nous utilisons à nouveau ==
pour comparer anotherBooleanObject
avec Boolean.TRUE
. En raison du fonctionnement de l'autoboxing et de la mise en cache des valeurs Boolean
par Java, pour les valeurs true
et false
, les objets Boolean
autoboxés font souvent référence aux mêmes instances mises en cache que Boolean.TRUE
et Boolean.FALSE
. Par conséquent, cette condition sera également probablement true
.
-
Enregistrez le fichier.
-
Compilez le programme :
javac HelloJava.java
-
Exécutez le programme :
java HelloJava
Vous devriez voir la sortie suivante :
Java is fun (using Boolean.TRUE)!
Another boolean object is true!
Cela confirme que l'utilisation de ==
avec Boolean.TRUE
fonctionne comme prévu dans ces cas car les variables font probablement référence au même objet Boolean.TRUE
sous - jacent.
Cependant, compter sur ==
pour comparer des objets Boolean
peut être risqué dans des scénarios plus complexes, en particulier si les objets Boolean
sont créés de différentes manières ou proviennent de différentes sources. Une façon plus sûre et recommandée de comparer des objets Boolean
pour l'égalité de valeur est d'utiliser la méthode .equals()
.
Modifions le code pour utiliser .equals()
.
-
Ouvrez HelloJava.java
dans l'éditeur.
-
Changez les instructions if
pour utiliser .equals()
:
public class HelloJava {
public static void main(String[] args) {
Boolean isJavaFunObject = Boolean.TRUE;
if (isJavaFunObject.equals(Boolean.TRUE)) {
System.out.println("Java is fun (using equals)!");
} else {
System.out.println("Java is not fun (using equals).");
}
Boolean anotherBooleanObject = true; // Autoboxing
if (anotherBooleanObject.equals(Boolean.TRUE)) {
System.out.println("Another boolean object is true (using equals)!");
} else {
System.out.println("Another boolean object is not true (using equals).");
}
}
}
Nous avons remplacé == Boolean.TRUE
par .equals(Boolean.TRUE)
. La méthode .equals()
compare la valeur des objets, et non leur emplacement en mémoire.
-
Enregistrez le fichier.
-
Compilez le programme :
javac HelloJava.java
-
Exécutez le programme :
java HelloJava
Vous devriez voir la sortie suivante :
Java is fun (using equals)!
Another boolean object is true (using equals)!
L'utilisation de .equals()
est la façon standard et la plus sûre de comparer des objets Boolean
pour l'égalité de valeur.
En résumé, bien que ==
puisse fonctionner pour comparer des objets Boolean
avec Boolean.TRUE
en raison de la mise en cache, la méthode .equals()
est la façon préférée et plus fiable de vérifier si un objet Boolean
représente la valeur true
.