Meilleure approche pour convertir un object booléen en chaîne dans Java

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