web-dev-qa-db-fra.com

Quelle est la bonne façon de déclarer une variable booléenne en Java?

Je viens de commencer à apprendre Java. Dans le cours en ligne que je suis, je suis invité à essayer le code suivant:

String email1 = "[email protected]";
String email2 = "[email protected]";
Boolean isMatch = false;

isMatch = email1.equals (email2);

if (isMatch == true){
    System.out.println("Emails match");
}
else{
    System.out.println("Emails don't match");
}

Je ne comprends pas pourquoi on me demande de déclarer isMatch comme faux lorsque, sur la ligne suivante, je compare les adresses e-mail et attribue la valeur à isMatch.
J'ai essayé le code suivant qui semble fonctionner de la même manière:

String email1 = "[email protected]";
String email2 = "[email protected]";
Boolean isMatch;

isMatch = email1.equals (email2);

if (isMatch == true){
    System.out.println("Emails match");
}
else{
    System.out.println("Emails don't match");
}

Sur le parcours, cela n’explique pas pourquoi je déclare isMatch comme faux en premier. Existe-t-il une raison pour laquelle je dois déclarer isMatch comme faux avant de comparer les adresses électroniques? 

8
user1762031

Vous n'avez pas à le faire, mais certaines personnes aiment initialiser explicitement toutes les variables (moi aussi). Surtout ceux qui programment dans une variété de langues, il est simplement plus facile d’avoir pour règle d’initialiser toujours vos variables plutôt que de décider au cas par cas/langue par langue.

Par exemple, Java a des valeurs par défaut pour Boolean, int etc. .. C, par contre, ne donne pas automatiquement les valeurs initiales, tout ce qui se trouve en mémoire correspond à ce que vous obtenez sauf si vous attribuez explicitement une valeur vous-même.

Dans votre cas ci-dessus, comme vous l'avez découvert, le code fonctionne tout aussi bien sans initialisation, d'autant plus que la variable est définie dans la ligne suivante, ce qui la rend particulièrement redondante. Parfois, vous pouvez combiner ces deux lignes (déclaration et initialisation - comme le montrent certains des autres articles) et obtenir le meilleur des deux approches, c’est-à-dire initialiser votre variable avec le résultat de l’opération email1.equals (email2);.

7
Levon

Non seulement il n’est pas nécessaire de le déclarer en tant que false d’abord, j’ajouterai quelques améliorations:

  • utilisez boolean au lieu de Boolean (qui peut aussi être null sans raison)

  • attribuer lors de la déclaration:

    boolean isMatch = email1.equals(email2);
    
  • ... et utilisez le mot clé final si vous pouvez:

    final boolean isMatch = email1.equals(email2);
    

Enfin et surtout:

if (isMatch == true)

peut être exprimé par:

if (isMatch)

ce qui rend l'indicateur isMatch pas utile, l'inclure ne risquant pas de gêner la lisibilité. Je suggère de chercher de meilleurs cours/tutoriels là-bas ...

12
Tomasz Nurkiewicz

Il n'y a aucune raison de faire ça. En fait, je choisirais de combiner déclaration et initialisation comme dans

final Boolean isMatch = email1.equals (email2);

en utilisant le mot clé final afin que vous ne puissiez plus le changer (accidentellement) par la suite.

2
Confusion

Tout d’abord, vous ne devriez en utiliser aucun. Vous utilisez le type wrapper, qui devrait rarement être utilisé si vous avez un type primitif . Vous devriez donc plutôt utiliser boolean.

De plus, nous initialisons la variable boolean à false pour conserver une valeur par défaut initiale qui est false. Si vous l'avez déclarée comme variable d'instance, elle sera automatiquement initialisée à false.

Mais, c’est complètement à vous, que vous assigniez une valeur par défaut ou non. Je préfère plutôt les initialiser au moment de la déclaration.

Mais si vous affectez immédiatement votre variable, vous pouvez lui affecter directement une valeur, sans avoir à définir une valeur default.

Donc, dans votre cas, je l’utiliserais comme ceci: -

boolean isMatch = email1.equals (email2);
1
Rohit Jain

Dans votre exemple, vous n'avez pas besoin de. En tant que pratique de programmation standard, toutes les variables étant référencées à l'intérieur d'un bloc de code, par exemple try{} catch(){}, et référencées également à l'extérieur du bloc, vous devez d'abord déclarer les variables à l'extérieur du bloc try, par exemple.

Ceci est utile lorsque votre appel à la méthode equals lève une exception, par exemple. NullPointerException;

     boolean isMatch = false;

     try{
         isMatch = email1.equals (email2);
      }catch(NullPointerException npe){
         .....
      }
      System.out.print("Match=="+isMatch);
      if(isMatch){
        ......
      }
1
Yogendra Singh

Comme l'a déclaré Levon, ceci n'est pas obligatoire, comme indiqué dans la documentation: http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

C'est probablement une habitude d'autres langages qui ne garantissent pas les valeurs par défaut des types de données primitifs.

0
ApplePie