J’essaie de convertir un booléen en type de chaîne …
Boolean b = true; Ssortingng str = Ssortingng.valueOf(b);
ou
Boolean b = true; Ssortingng str = Boolean.toSsortingng(b);
lequel des deux serait plus efficace?
Je ne pense pas qu’il y aurait une différence de performance significative entre eux, mais je préférerais la 1ère façon.
Si vous avez une référence Boolean
, Boolean.toSsortingng(boolean)
lancera NullPointerException
si votre référence est null
. Comme la référence est unboxed à boolean
avant d’être passé à la méthode.
Bien que la méthode Ssortingng.valueOf()
, comme le montre le code source, vérifie la valeur explicite de null
:
public static Ssortingng valueOf(Object obj) { return (obj == null) ? "null" : obj.toSsortingng(); }
Il suffit de tester ce code:
Boolean b = null; System.out.println(Ssortingng.valueOf(b)); // Prints null System.out.println(Boolean.toSsortingng(b)); // Throws NPE
Pour les booléens primitifs, il n’y a pas de différence.
Si vous êtes sûr que votre valeur n’est pas null
vous pouvez utiliser la troisième option qui est
Ssortingng str3 = b.toSsortingng();
et son code ressemble à
public Ssortingng toSsortingng() { return value ? "true" : "false"; }
Si vous voulez être null-safe, utilisez Ssortingng.valueOf(b)
quel code ressemble
public static Ssortingng valueOf(Object obj) { return (obj == null) ? "null" : obj.toSsortingng(); }
Comme vous le voyez, il testera d’abord la méthode null
et plus tard invoque la toSsortingng()
sur votre object.
L’appel de Boolean.toSsortingng(b)
invoquera
public static Ssortingng toSsortingng(boolean b) { return b ? "true" : "false"; }
ce qui est un peu moins b.toSsortingng()
que b.toSsortingng()
car JVM doit d’abord déballer le Boolean
pour le boolean
qui sera passé en argument à Boolean.toSsortingng(...)
, tandis que b.toSsortingng()
réutilise private boolean value
champ de private boolean value
dans un object Boolean
tient son état.
public class Sandbox { /** * @param args the command line arguments */ public static void main(Ssortingng[] 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 --------------
Si c’est pour obtenir une valeur “true” constante, plutôt que “True” ou “TRUE”, vous pouvez utiliser ceci:
Boolean.TRUE.toSsortingng(); Boolean.FALSE.toSsortingng();
Si vous cherchez un moyen rapide de le faire, par exemple le débogage, vous pouvez simplement concaténer une chaîne vide sur le booléen:
System.out.println(b+"");
Cependant, je recommande fortement d’utiliser une autre méthode pour l’utilisation en production. Ceci est une solution simple et rapide qui est utile pour le débogage.
Cela dépend de ce que vous entendez par “efficace”. Sur le plan des performances, les deux versions sont identiques au même bytecode.
$ ./javap.exe -c java.lang.Ssortingng | grep -A 10 "valueOf(boolean)" public static java.lang.Ssortingng valueOf(boolean); Code: 0: iload_0 1: ifeq 9 4: ldc #14 // Ssortingng true 6: goto 11 9: ldc #10 // Ssortingng false 11: areturn $ ./javap.exe -c java.lang.Boolean | grep -A 10 "toSsortingng(boolean)" public static java.lang.Ssortingng toSsortingng(boolean); Code: 0: iload_0 1: ifeq 9 4: ldc #3 // Ssortingng true 6: goto 11 9: ldc #2 // Ssortingng false 11: areturn