118 votes

Meilleure approche pour convertir un objet booléen en chaîne de caractères en java

J'essaie de convertir un booléen en chaîne de caractères...

Boolean b = true;
String str = String.valueOf(b);

ou

Boolean b = true;
String str = Boolean.toString(b);

lequel des deux serait le plus efficace ?

161voto

Rohit Jain Points 90368

Je ne pense pas qu'il y ait une différence de performance significative entre les deux, mais je préférerais la première méthode.

Si vous avez un Boolean référence, Boolean.toString(boolean) jettera NullPointerException si votre référence est null . Comme la référence est déballée pour boolean avant d'être transmis à la méthode.

Alors que, String.valueOf() comme le montre le code source, fait l'explicite null vérifier :

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

Il suffit de tester ce code :

Boolean b = null;

System.out.println(String.valueOf(b));    // Prints null
System.out.println(Boolean.toString(b));  // Throws NPE

Pour les booléens primitifs, il n'y a pas de différence.

29voto

Pshemo Points 34648

Si vous êtes sûr que votre valeur n'est pas null vous pouvez utiliser la troisième option qui est

String str3 = b.toString();

et son code ressemble à

public String toString() {
    return value ? "true" : "false";
}

Si vous voulez être en sécurité nulle, utilisez String.valueOf(b) dont le code ressemble à

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

donc comme vous le voyez, il va d'abord tester pour null et invoquer plus tard toString() sur votre objet.


Appel à Boolean.toString(b) invoquera

public static String toString(boolean b) {
    return b ? "true" : "false";
}

qui est un peu plus lent que b.toString() puisque la JVM doit d'abord déballer Boolean a boolean qui sera passé comme argument à Boolean.toString(...) alors que b.toString() réutilisations private boolean value dans le champ Boolean qui contient son état.

3voto

public class Sandbox {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Boolean b = true;
        boolean z = false;
        echo (b);
        echo (z);
        echo ("Value of b= " + b +"\nValue of z= " + z);
    }

    public static void echo(Object obj){
        System.out.println(obj);
    } 

}
Result
--------------
true
false
Value of b= true
Value of z= false
--------------

3voto

Shashank Points 323

Si c'est dans le but d'obtenir une valeur "vraie" constante, plutôt que "Vrai" ou "VRAI", vous pouvez utiliser ceci :

Boolean.TRUE.toString();
Boolean.FALSE.toString();

1voto

jskidd3 Points 1998

Si vous cherchez un moyen rapide de le faire, par exemple pour le débogage, vous pouvez simplement concaténer une chaîne vide sur le booléen :

System.out.println(b+"");

Cependant, je recommande vivement d'utiliser une autre méthode pour une utilisation en production. Il s'agit d'une solution simple et rapide qui est utile pour le débogage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X