Introduction
Dans ce laboratoire (lab), vous apprendrez à vérifier si une variable booléenne est true en Java. Nous explorerons la méthode fondamentale utilisant l'opérateur d'égalité, plongerons dans la gestion de la classe wrapper Boolean et discuterons de la manière de gérer les valeurs null potentielles.
Grâce à des exemples pratiques, vous acquerrez une expérience concrète dans l'écriture de logique conditionnelle basée sur des valeurs booléennes, garantissant que votre code Java est robuste et gère efficacement différents scénarios.
Utiliser l'opérateur d'égalité pour vérifier la valeur vraie
Dans cette étape, nous allons explorer comment vérifier si une variable booléenne est true en Java en utilisant l'opérateur d'égalité. Bien que cela puisse sembler simple, il est important de comprendre les subtilités pour écrire un code propre et correct.
En Java, le type de données boolean peut prendre l'une des deux valeurs suivantes : true ou false. Lorsque vous avez une variable booléenne, vous devez souvent vérifier sa valeur pour prendre des décisions dans votre programme.
La façon la plus courante de vérifier si une variable booléenne est true consiste à utiliser l'opérateur d'égalité ==.
Créons un simple programme Java pour illustrer cela.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE s'il n'est pas déjà ouvert.Remplacez tout le contenu du fichier par le code suivant :
public class HelloJava { public static void main(String[] args) { boolean isJavaFun = true; if (isJavaFun == true) { System.out.println("Java is fun!"); } else { System.out.println("Java is not fun."); } } }Examinons les nouvelles parties de ce code :
boolean isJavaFun = true;: Cette ligne déclare une variable booléenne nomméeisJavaFunet l'initialise avec la valeurtrue.if (isJavaFun == true): Il s'agit d'une instructionif. Elle vérifie si la condition entre parenthèses esttrue. La conditionisJavaFun == trueutilise l'opérateur d'égalité==pour comparer la valeur de la variableisJavaFunavec le littéral booléentrue.System.out.println("Java is fun!");: Cette ligne sera exécutée si la conditionisJavaFun == trueesttrue.else: Ce mot-clé introduit le bloc de code à exécuter si la condition de l'instructionifestfalse.System.out.println("Java is not fun.");: Cette ligne sera exécutée si la conditionisJavaFun == trueestfalse.
Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme en utilisant la commande
javacdans le terminal :javac HelloJava.javaS'il n'y a pas d'erreurs, un fichier
HelloJava.classsera créé dans le répertoire~/project.Exécutez le programme compilé en utilisant la commande
java:java HelloJavaVous devriez voir la sortie suivante :
Java is fun!Cela confirme que la condition de l'instruction
ifisJavaFun == trues'est évaluée àtrue, et le message correspondant a été affiché.
Bien que l'utilisation de == true soit parfaitement valide et facile à comprendre, en Java, vous pouvez simplifier la vérification de true. Étant donné que l'instruction if évalue déjà l'expression entre parenthèses comme un booléen, vous pouvez directement utiliser la variable booléenne elle-même comme condition.
Modifions le code pour utiliser cette approche simplifiée :
Ouvrez à nouveau
HelloJava.javadans l'éditeur.Changez l'instruction
ifcomme suit :if (isJavaFun) { System.out.println("Java is fun!"); } else { System.out.println("Java is not fun."); }Notez que nous avons supprimé
== true. L'instructionif (isJavaFun)est équivalente àif (isJavaFun == true).Enregistrez le fichier.
Compilez le programme modifié :
javac HelloJava.javaExécutez le programme à nouveau :
java HelloJavaVous obtiendrez la même sortie :
Java is fun!Cela démontre que l'utilisation directe de la variable booléenne dans la condition de l'instruction
ifest une façon plus concise et idiomatique de vérifier si elle esttrue.
En résumé, vous pouvez utiliser l'opérateur d'égalité == true pour vérifier si un booléen est vrai, mais la façon la plus courante et la plus propre consiste simplement à utiliser la variable booléenne elle-même comme condition dans une instruction if.
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.javadans 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 typeBooleanet lui assignons la constanteBoolean.TRUE.if (isJavaFunObject == Boolean.TRUE): Nous utilisons l'opérateur d'égalité==pour comparer notre objetBooleanavec la constanteBoolean.TRUE. Étant donné queisJavaFunObjectest assigné àBoolean.TRUE, ils font référence au même objet, donc cette condition seratrue.Boolean anotherBooleanObject = true;: Cette ligne illustre l'"autoboxing". Java convertit automatiquement la valeur primitivebooleantrueen un objetBoolean.if (anotherBooleanObject == Boolean.TRUE): Nous utilisons à nouveau==pour compareranotherBooleanObjectavecBoolean.TRUE. En raison du fonctionnement de l'autoboxing et de la mise en cache des valeursBooleanpar Java, pour les valeurstrueetfalse, les objetsBooleanautoboxés font souvent référence aux mêmes instances mises en cache queBoolean.TRUEetBoolean.FALSE. Par conséquent, cette condition sera également probablementtrue.
Enregistrez le fichier.
Compilez le programme :
javac HelloJava.javaExécutez le programme :
java HelloJavaVous devriez voir la sortie suivante :
Java is fun (using Boolean.TRUE)! Another boolean object is true!Cela confirme que l'utilisation de
==avecBoolean.TRUEfonctionne comme prévu dans ces cas car les variables font probablement référence au même objetBoolean.TRUEsous - 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.javadans l'éditeur.Changez les instructions
ifpour 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.TRUEpar.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.javaExécutez le programme :
java HelloJavaVous 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 objetsBooleanpour 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.
Gérer les valeurs booléennes nulles
Dans l'étape précédente, nous avons appris à connaître la classe wrapper Boolean. Une différence clé entre le type primitif boolean et la classe wrapper Boolean est qu'une variable de type Boolean peut avoir la valeur null, tandis qu'un boolean primitif ne peut pas. Gérer les valeurs null est crucial en Java pour éviter les erreurs de type NullPointerException.
Une NullPointerException se produit lorsque vous essayez d'utiliser une variable qui pointe actuellement vers null comme si c'était un objet valide. Par exemple, appeler une méthode sur un objet null entraînera une NullPointerException.
Lorsque vous vérifiez si un objet Boolean est true, vous devez faire attention si l'objet peut être null.
Voyons ce qui se passe si nous essayons de vérifier un objet Boolean null en utilisant les méthodes que nous avons apprises jusqu'à présent.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Remplacez le code par le suivant :
public class HelloJava { public static void main(String[] args) { Boolean nullableBoolean = null; // Attempting to use == with null if (nullableBoolean == true) { System.out.println("This won't be printed."); } else { System.out.println("Using == with null Boolean."); } // Attempting to use .equals() with null // This will cause a NullPointerException! // if (nullableBoolean.equals(Boolean.TRUE)) { // System.out.println("This will not be reached."); // } else { // System.out.println("This will not be reached either."); // } } }Dans ce code :
Boolean nullableBoolean = null;: Nous déclarons une variable de typeBooleanet la définissons explicitement surnull.if (nullableBoolean == true): Nous utilisons l'opérateur d'égalité==pour comparer l'objetBooleannullavec la valeur primitivetrue. Lorsque vous comparez un objetBoolean(même s'il estnull) avec unbooleanprimitif, Java effectue un "unboxing". Il essaie de convertir l'objetBooleanen unbooleanprimitif. Si l'objetBooleanestnull, ce processus d'unboxing entraîne uneNullPointerException.- La vérification
.equals()mise en commentaire entraînerait également uneNullPointerExceptioncar vous essayez d'appeler la méthode.equals()sur un objetnull(nullableBoolean).
Enregistrez le fichier.
Compilez le programme :
javac HelloJava.javaExécutez le programme :
java HelloJavaVous verrez un message d'erreur dans le terminal, indiquant une
NullPointerException:Exception in thread "main" java.lang.NullPointerException at HelloJava.main(HelloJava.java:6)Cela montre que comparer directement un objet
Booleanpotentiellementnullavec unbooleanprimitif en utilisant==ou en appelant.equals()sur celui-ci peut entraîner uneNullPointerException.
Pour gérer en toute sécurité les objets Boolean potentiellement null, vous devez toujours vérifier si l'objet est null avant d'essayer de le déballer (unboxing) ou d'appeler des méthodes sur celui-ci.
Voici comment vous pouvez vérifier en toute sécurité si un objet Boolean est true :
Ouvrez
HelloJava.javadans l'éditeur.Remplacez le code par le suivant :
public class HelloJava { public static void main(String[] args) { Boolean nullableBoolean = null; Boolean trueBoolean = Boolean.TRUE; Boolean falseBoolean = Boolean.FALSE; // Safely check if nullableBoolean is true if (nullableBoolean != null && nullableBoolean == true) { System.out.println("nullableBoolean is true (safe check)."); } else { System.out.println("nullableBoolean is not true or is null (safe check)."); } // Safely check if trueBoolean is true if (trueBoolean != null && trueBoolean == true) { System.out.println("trueBoolean is true (safe check)."); } else { System.out.println("trueBoolean is not true or is null (safe check)."); } // Safely check if falseBoolean is true if (falseBoolean != null && falseBoolean == true) { System.out.println("falseBoolean is true (safe check)."); } else { System.out.println("falseBoolean is not true or is null (safe check)."); } // Alternative safe check using equals if (Boolean.TRUE.equals(nullableBoolean)) { System.out.println("nullableBoolean is true (safe equals check)."); } else { System.out.println("nullableBoolean is not true or is null (safe equals check)."); } if (Boolean.TRUE.equals(trueBoolean)) { System.out.println("trueBoolean is true (safe equals check)."); } else { System.out.println("trueBoolean is not true or is null (safe equals check)."); } } }Dans ce code mis à jour :
if (nullableBoolean != null && nullableBoolean == true): Nous vérifions d'abord sinullableBooleann'est pasnullen utilisantnullableBoolean != null. L'opérateur&&signifie que la deuxième partie de la condition (nullableBoolean == true) ne sera évaluée que si la première partie (nullableBoolean != null) esttrue. Cela empêche laNullPointerException. SinullableBooleanestnull, la première partie estfalse, et toute la condition estfalsesans évaluer la deuxième partie.if (Boolean.TRUE.equals(nullableBoolean)): C'est une autre façon sûre de vérifier si un objetBooleanesttrue, même s'il estnull. En appelant.equals()sur l'objet nonnullconnuBoolean.TRUEet en passant l'objet potentiellementnullnullableBooleancomme argument, nous évitons laNullPointerException. La méthode.equals()est conçue pour gérer les argumentsnullde manière appropriée ;Boolean.TRUE.equals(null)retournera simplementfalse.
Enregistrez le fichier.
Compilez le programme :
javac HelloJava.javaExécutez le programme :
java HelloJavaVous devriez voir la sortie suivante :
nullableBoolean is not true or is null (safe check). trueBoolean is true (safe check). falseBoolean is not true or is null (safe check). nullableBoolean is not true or is null (safe equals check). trueBoolean is true (safe equals check).Cela démontre comment vérifier en toute sécurité la valeur d'un objet
Boolean, même lorsqu'il peut êtrenull, en utilisant à la fois la vérification!= nullcombinée avec== trueet la méthodeBoolean.TRUE.equals().
N'oubliez jamais de prendre en compte la possibilité d'une valeur null lorsque vous travaillez avec des objets Boolean pour éviter les erreurs d'exécution.
Résumé
Dans ce laboratoire, nous avons appris à vérifier si une variable booléenne est true en Java. Nous avons commencé par utiliser l'opérateur d'égalité == pour comparer directement une variable booléenne avec le littéral booléen true. C'est la méthode la plus courante et la plus directe pour vérifier la valeur d'un booléen primitif.
Nous avons également exploré comment gérer les objets wrapper Boolean, qui peuvent être null. Nous avons appris que comparer directement un objet Boolean avec true en utilisant == peut ne pas fonctionner comme prévu en raison de l'identité des objets. Au lieu de cela, nous devrions utiliser la méthode equals() ou déballer (unboxing) l'objet Boolean en sa valeur booléenne primitive avant la comparaison. Enfin, nous avons souligné l'importance de gérer les potentielles NullPointerException lors de la manipulation d'objets Boolean pouvant être null en vérifiant la valeur null avant d'essayer d'accéder à leur valeur.



