IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Comparer des Strings] avec java.lang.String.equals() ou avec org.apache.commons.lang.StringUtils.equals() ?


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut [Comparer des Strings] avec java.lang.String.equals() ou avec org.apache.commons.lang.StringUtils.equals() ?
    Bonjour,

    je travaille avec la méthode String.equals() mais j'ai découvert que dans le code que je dois faire évoluer les comparaisons sont réalisées avec la méthode org.apache.commons.lang.StringUtils.equals().

    Ni une, ni deux, j'ai consulté les documentations réciproques et j'en ai compris que String.equals() ne renvoit true qu'uniquement si les chaînes sont identiques (false si elles valent null toutes les deux).
    Au contraire StringUtils.equals renvoit true même si les deux valeurs sont null.

    Ai-je correctement compris la documentation ? Qu'en est-il d'une comparaison entre une chaîne null et non null avec String.equals(), avec StringUtils.equals ?

    Merci de votre attention.

    les docs réciproques :
    http://java.sun.com/javase/6/docs/ap...va.lang.Object)
    http://commons.apache.org/lang/api-r...ringUtils.html

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    Apparament, je dirais plutôt que la différence vient du fait que la méthode d'apache.commons.lang est static, ce qui lui permet de gérer le cas 'null'

    La méthode String.equals(), gère le cas null, mais uniquement s'il s'agit de la chaîne passée en paramètre. Dans le cas où c'est la première String qui est null, tu vas avoir un NullPointerException.

    Le code de la méthode d'apache.commons.lang doit probablement ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static boolean equals(String string1, String string2) {
        return (string1 == string2) 
                   || (string1 != null && string1.equals(string2));
    }
    En gros, elle gère le cas null pour la 'première' instance.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Bonjour Deaf et merci pour ta réponse si rapide !

    J'ai bien saisi la différence et je pense conserver la méthode equals proposée par org.apache car elle est "null safe", encore merci.

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Je dirais que cela dépend des cas.

    Parfois tu es sûr qu'une chaîne est non nulle (parce que tu l'as déjà testé avant, parce que tu l'as construite à la main, etc.). Là, autant utiliser directement String.equals() sur la chaîne que tu sais non-null.

    Un cas très fréquent est la comparaison avec des chaînes écrites en dur dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ("maValeur".equals(monParam)) {
    ...
    }
    Là, inutile d'aller chercher la méthode static.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Je le savais mais comme le disait un de mes profs d'algo :"ça va sans dire, mais ça va mieux en le disant !" ~ DG.

    Encore merci.

Discussions similaires

  1. [DisplayTag] installation org/apache/commons/lang/UnhandledException
    Par itr dans le forum Taglibs
    Réponses: 7
    Dernier message: 26/10/2009, 17h29
  2. Comparer des entiers en tant que string
    Par power of mind dans le forum Langage
    Réponses: 12
    Dernier message: 19/06/2009, 11h54
  3. Réponses: 10
    Dernier message: 05/06/2008, 16h58
  4. Prob d'encodage avec la classe org.apache.commons.lang.StringEscapeUtils
    Par elmessoussi dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 21/04/2008, 15h32
  5. [DisplayTag] java.lang.NoClassDefFoundError: org/apache/commons/lang/UnhandledException
    Par MAJIK_ENIS dans le forum Taglibs
    Réponses: 18
    Dernier message: 06/04/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo