Wolę ""+b. Jest wolniejszy, ale bardziej wydajny dla programisty. Jeśli chcesz uzyskać najwyższą wydajność, możesz zapisać dane do / z bezpośredniego ByteBuffera, tj. Zmienić to, co robisz z Stringiem, aby nie było to potrzebne.
Peter Lawrey,
Ponadto, jeśli chcesz traktować nulljak false, możesz użyćString.format("%b", b)
ZhekaKozlov
Odpowiedzi:
145
Nie sądzę, żeby była między nimi jakaś znacząca różnica w wydajności, ale wolałbym pierwszy sposób.
Jeśli masz Booleanodniesienie, Boolean.toString(boolean)wyrzuci, NullPointerExceptionjeśli masz odniesienie null. Ponieważ odwołanie jest rozpakowane booleanprzed przekazaniem do metody.
Podczas gdy String.valueOf()metoda, jak pokazuje kod źródłowy, robi jawne nullsprawdzenie:
więc jak widzisz, najpierw przetestuje, nulla później wywoła toString()metodę na twoim obiekcie.
Wołanie Boolean.toString(b)wywoła
publicstaticString toString(boolean b){return b ?"true":"false";}
co jest trochę wolniejsze niż b.toString()od czasu, gdy JVM musi najpierw rozpakować,Boolean do booleanktórego zostanie przekazany jako argument Boolean.toString(...), podczas gdy b.toString()ponownie wykorzystuje private boolean valuepole w Booleanobiekcie, który utrzymuje jego stan.
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--------------
Czy możesz wyjaśnić, dlaczego nie zalecamy używania do użytku produkcyjnego? Czy może zawieść w jakimś scenariuszu?
lazyvab
@lazyvab Szczerze mówiąc, nie mam pojęcia! Nie piszę już Javy, ale mogę tylko przypuszczać, że to było coś, co musiałem usłyszeć. Od kilku lat programuję w innych językach, ale nie rozumiem, dlaczego używanie tego w produkcji miałoby zaszkodzić. Poza tym i tak System.out.printlnsłuży do debugowania, prawda?
jskidd3
1
Zależy od tego, co masz na myśli, mówiąc „wydajnie”. Pod względem wydajności obie wersje mają ten sam kod bajtowy.
""+b
. Jest wolniejszy, ale bardziej wydajny dla programisty. Jeśli chcesz uzyskać najwyższą wydajność, możesz zapisać dane do / z bezpośredniego ByteBuffera, tj. Zmienić to, co robisz z Stringiem, aby nie było to potrzebne.null
jakfalse
, możesz użyćString.format("%b", b)
Odpowiedzi:
Nie sądzę, żeby była między nimi jakaś znacząca różnica w wydajności, ale wolałbym pierwszy sposób.
Jeśli masz
Boolean
odniesienie,Boolean.toString(boolean)
wyrzuci,NullPointerException
jeśli masz odniesienienull
. Ponieważ odwołanie jest rozpakowaneboolean
przed przekazaniem do metody.Podczas gdy
String.valueOf()
metoda, jak pokazuje kod źródłowy, robi jawnenull
sprawdzenie:Po prostu przetestuj ten kod:
W przypadku prymitywnych wartości logicznych nie ma różnicy.
źródło
Jeśli jesteś pewien, że nie
null
masz wartości , możesz skorzystać z trzeciej opcji, którą jesta jego kod wygląda tak
Jeśli chcesz mieć bezpieczny null, użyj
String.valueOf(b)
kodu, który wygląda jakwięc jak widzisz, najpierw przetestuje,
null
a później wywołatoString()
metodę na twoim obiekcie.Wołanie
Boolean.toString(b)
wywołaco jest trochę wolniejsze niż
b.toString()
od czasu, gdy JVM musi najpierw rozpakować,Boolean
doboolean
którego zostanie przekazany jako argumentBoolean.toString(...)
, podczas gdyb.toString()
ponownie wykorzystujeprivate boolean value
pole wBoolean
obiekcie, który utrzymuje jego stan.źródło
źródło
Jeśli ma to na celu uzyskanie stałej wartości „true” zamiast „True” lub „TRUE”, możesz użyć tego:
źródło
Jeśli szukasz szybkiego sposobu, aby to zrobić, na przykład debugowania, możesz po prostu połączyć pusty ciąg z wartością logiczną:
Jednak zdecydowanie zalecam użycie innej metody do użytku produkcyjnego. Jest to proste i szybkie rozwiązanie przydatne do debugowania.
źródło
System.out.println
służy do debugowania, prawda?Zależy od tego, co masz na myśli, mówiąc „wydajnie”. Pod względem wydajności obie wersje mają ten sam kod bajtowy.
źródło
Jeśli widzisz implementację obu metod, wyglądają tak samo.
String.valueOf (b)
Boolean.toString (b)
Zatem obie metody są równie skuteczne.
źródło