Haben Sie sich den Quellcode dieser beiden Methoden angesehen?
Hat aufgehört - Anony-Mousse
1
Ich bevorzuge ""+b. Es ist langsamer, aber effizienter für den Entwickler. Wenn Sie Spitzenleistung wünschen, können Sie die Daten in einen direkten ByteBuffer schreiben, dh ändern, was Sie mit dem String tun, damit Sie ihn nicht benötigen.
Peter Lawrey
Auch, wenn Sie behandeln wollen , nullwie falsekönnen Sie verwendenString.format("%b", b)
ZhekaKozlov
Antworten:
145
Ich glaube nicht, dass es einen signifikanten Leistungsunterschied zwischen ihnen geben würde, aber ich würde den ersten Weg bevorzugen.
Wenn Sie eine BooleanReferenz haben, Boolean.toString(boolean)wird geworfen, NullPointerExceptionwenn Ihre Referenz ist null. Da die Referenz entpackt ist, booleanbevor sie an die Methode übergeben wird.
Während die String.valueOf()Methode, wie der Quellcode zeigt, die explizite nullPrüfung durchführt:
Wie Sie sehen, wird zuerst nulldie toString()Methode für Ihr Objekt getestet und später aufgerufen .
Der Anruf Boolean.toString(b)wird aufgerufen
publicstaticString toString(boolean b){return b ?"true":"false";}
Das ist etwas langsamer als b.toString()da JVM muss zuerst unboxBoolean zu booleandem als Argument übergeben wird , um Boolean.toString(...), während b.toString()Umnutzungen private boolean valueFeld in BooleanObjekt , das seinen Zustand hält.
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--------------
Wenn Sie nach einer schnellen Möglichkeit suchen, dies zu tun, beispielsweise das Debuggen, können Sie einfach eine leere Zeichenfolge mit dem Booleschen Wert verknüpfen:
System.out.println(b+"");
Ich empfehle jedoch dringend, eine andere Methode für die Verwendung in der Produktion zu verwenden. Dies ist eine einfache schnelle Lösung, die zum Debuggen nützlich ist.
Können Sie bitte erläutern, warum Sie die Verwendung für die Produktion nicht empfehlen? Kann es in einem bestimmten Szenario fehlschlagen?
Lazyvab
@lazyvab Ehrlich gesagt habe ich keine Ahnung! Ich schreibe kein Java mehr, aber ich kann nur vermuten, dass es etwas war, was ich gehört haben muss. Ich habe in den letzten Jahren in anderen Sprachen programmiert, kann aber nicht verstehen, warum die Verwendung in der Produktion schaden würde. Außerdem System.out.printlnist sowieso für das Debuggen, oder?
Jskidd3
1
Kommt darauf an, was du mit "effizient" meinst. In Bezug auf die Leistung sind beide Versionen identisch mit dem gleichen Bytecode.
""+b
. Es ist langsamer, aber effizienter für den Entwickler. Wenn Sie Spitzenleistung wünschen, können Sie die Daten in einen direkten ByteBuffer schreiben, dh ändern, was Sie mit dem String tun, damit Sie ihn nicht benötigen.null
wiefalse
können Sie verwendenString.format("%b", b)
Antworten:
Ich glaube nicht, dass es einen signifikanten Leistungsunterschied zwischen ihnen geben würde, aber ich würde den ersten Weg bevorzugen.
Wenn Sie eine
Boolean
Referenz haben,Boolean.toString(boolean)
wird geworfen,NullPointerException
wenn Ihre Referenz istnull
. Da die Referenz entpackt ist,boolean
bevor sie an die Methode übergeben wird.Während die
String.valueOf()
Methode, wie der Quellcode zeigt, die explizitenull
Prüfung durchführt:Testen Sie einfach diesen Code:
Für primitive Boolesche Werte gibt es keinen Unterschied.
quelle
Wenn Sie sicher sind, dass Ihr Wert nicht ist
null
, können Sie die dritte Option verwendenund sein Code sieht aus wie
Wenn Sie null-sicher sein möchten, verwenden Sie,
String.valueOf(b)
welcher Code aussiehtWie Sie sehen, wird zuerst
null
dietoString()
Methode für Ihr Objekt getestet und später aufgerufen .Der Anruf
Boolean.toString(b)
wird aufgerufenDas ist etwas langsamer als
b.toString()
da JVM muss zuerst unboxBoolean
zuboolean
dem als Argument übergeben wird , umBoolean.toString(...)
, währendb.toString()
Umnutzungenprivate boolean value
Feld inBoolean
Objekt , das seinen Zustand hält.quelle
quelle
Wenn dies dazu dient, einen konstanten "wahren" Wert anstelle von "wahr" oder "WAHR" zu erhalten, können Sie Folgendes verwenden:
quelle
Wenn Sie nach einer schnellen Möglichkeit suchen, dies zu tun, beispielsweise das Debuggen, können Sie einfach eine leere Zeichenfolge mit dem Booleschen Wert verknüpfen:
Ich empfehle jedoch dringend, eine andere Methode für die Verwendung in der Produktion zu verwenden. Dies ist eine einfache schnelle Lösung, die zum Debuggen nützlich ist.
quelle
System.out.println
ist sowieso für das Debuggen, oder?Kommt darauf an, was du mit "effizient" meinst. In Bezug auf die Leistung sind beide Versionen identisch mit dem gleichen Bytecode.
quelle
Wenn Sie die Implementierung beider Methoden sehen, sehen sie gleich aus.
String.valueOf (b)
Boolean.toString (b)
Beide Methoden sind also gleich effizient.
quelle