Avez-vous regardé le code source de ces deux méthodes?
A QUITTER - Anony-Mousse
1
Je préfère ""+b. C'est plus lent mais plus efficace pour le développeur. Si vous voulez des performances optimales, vous pouvez écrire les données vers / depuis un ByteBuffer direct, c'est-à-dire changer ce que vous faites avec la chaîne pour ne pas en avoir besoin.
Peter Lawrey
En outre, si vous souhaitez traiter nullcomme false, vous pouvez utiliserString.format("%b", b)
ZhekaKozlov
Réponses:
145
Je ne pense pas qu'il y aurait une différence de performance significative entre eux, mais je préférerais la 1ère manière.
Si vous avez une Booleanréférence, Boolean.toString(boolean)jettera NullPointerExceptionsi votre référence est null. Comme la référence est déballée booleanavant d'être transmise à la méthode.
Alors que, String.valueOf()méthode comme le montre le code source, effectue la nullvérification explicite :
comme vous le voyez, il testera d'abord nullet invoquera plus tard la toString()méthode sur votre objet.
L'appel Boolean.toString(b)invoquera
publicstaticString toString(boolean b){return b ?"true":"false";}
ce qui est un peu plus lent que b.toString()puisque JVM doit d'abord déballerBoolean à booleanqui sera passé comme argument à Boolean.toString(...), tandis que b.toString()réutilise le private boolean valuechamp dans l' Booleanobjet qui conserve son état.
publicclassSandbox{/**
* @param args the command line arguments
*/publicstaticvoid main(String[] args){Boolean b =true;boolean z =false;
echo (b);
echo (z);
echo ("Value of b= "+ b +"\nValue of z= "+ z);}publicstaticvoid echo(Object obj){System.out.println(obj);}}
Result--------------truefalseValue of b=trueValue of z=false--------------
Si vous recherchez 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 une utilisation en production. C'est une solution rapide simple qui est utile pour le débogage.
Pouvez-vous expliquer pourquoi vous ne recommandez pas l'utilisation pour une utilisation en production? Peut-il échouer dans certains scénarios?
lazyvab
@lazyvab En toute honnêteté, je n'en ai aucune idée! Je n'écris plus Java mais je ne peux que présumer que c'était quelque chose que j'ai dû entendre. Je programme dans d'autres langages depuis quelques années, mais je ne vois pas pourquoi l'utilisation de cela en production ferait mal. En plus, System.out.printlnc'est pour le débogage de toute façon, non?
jskidd3
1
Cela dépend de ce que vous entendez par «efficace». En termes de performances, les deux versions sont les mêmes que le même bytecode.
""+b
. C'est plus lent mais plus efficace pour le développeur. Si vous voulez des performances optimales, vous pouvez écrire les données vers / depuis un ByteBuffer direct, c'est-à-dire changer ce que vous faites avec la chaîne pour ne pas en avoir besoin.null
commefalse
, vous pouvez utiliserString.format("%b", b)
Réponses:
Je ne pense pas qu'il y aurait une différence de performance significative entre eux, mais je préférerais la 1ère manière.
Si vous avez une
Boolean
référence,Boolean.toString(boolean)
jetteraNullPointerException
si votre référence estnull
. Comme la référence est déballéeboolean
avant d'être transmise à la méthode.Alors que,
String.valueOf()
méthode comme le montre le code source, effectue lanull
vérification explicite :Testez simplement ce code:
Pour le booléen primitif, il n'y a pas de différence.
la source
Si vous êtes sûr que votre valeur n'est pas,
null
vous pouvez utiliser la troisième option qui estet son code ressemble à
Si vous voulez être sûr de zéro, utilisez le
String.valueOf(b)
code qui ressemblecomme vous le voyez, il testera d'abord
null
et invoquera plus tard latoString()
méthode sur votre objet.L'appel
Boolean.toString(b)
invoquerace qui est un peu plus lent que
b.toString()
puisque JVM doit d'abord déballerBoolean
àboolean
qui sera passé comme argument àBoolean.toString(...)
, tandis queb.toString()
réutilise leprivate boolean value
champ dans l'Boolean
objet qui conserve son état.la source
la source
Si c'est dans le but d'obtenir une valeur constante "true", plutôt que "True" ou "TRUE", vous pouvez utiliser ceci:
la source
Si vous recherchez un moyen rapide de le faire, par exemple le débogage, vous pouvez simplement concaténer une chaîne vide sur le booléen:
Cependant, je recommande fortement d'utiliser une autre méthode pour une utilisation en production. C'est une solution rapide simple qui est utile pour le débogage.
la source
System.out.println
c'est pour le débogage de toute façon, non?Cela dépend de ce que vous entendez par «efficace». En termes de performances, les deux versions sont les mêmes que le même bytecode.
la source
Si vous voyez l'implémentation des deux méthodes, elles se ressemblent.
String.valueOf (b)
Boolean.toString (b)
Les deux méthodes sont donc également efficaces.
la source