Yo prefiero ""+b. Es más lento pero más eficiente para el desarrollador. Si desea un rendimiento superior, puede escribir los datos a / desde un ByteBuffer directo, es decir, cambiar lo que hace con el String para que no lo necesite.
Peter Lawrey
Además, si desea tratar nullcomo false, puede usarString.format("%b", b)
ZhekaKozlov
Respuestas:
145
No creo que haya una diferencia de rendimiento significativa entre ellos, pero preferiría la primera forma.
Si tiene una Booleanreferencia, Boolean.toString(boolean)arrojará NullPointerExceptionsi su referencia es null. Como se desempaqueta la referencia booleanantes de pasarla al método.
Mientras que, el String.valueOf()método que muestra el código fuente, hace la nullverificación explícita :
como puede ver, primero probará nully luego invocará el toString()método en su objeto.
Llamar Boolean.toString(b)invocará
publicstaticString toString(boolean b){return b ?"true":"false";}
que es un poco más lento que b.toString()porque JVM necesita primero desempaquetarBoolean a lo booleanque se pasará como argumento Boolean.toString(...), mientras que b.toString()reutiliza el private boolean valuecampo en el Booleanobjeto que mantiene su estado.
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 está buscando una forma rápida de hacer esto, por ejemplo, depurando, simplemente puede concatenar una cadena vacía en el booleano:
System.out.println(b+"");
Sin embargo, recomiendo encarecidamente utilizar otro método para el uso de producción. Esta es una solución rápida y sencilla que resulta útil para depurar.
¿Puede explicar por qué no recomienda su uso para producción? ¿Puede fallar en algún escenario?
lazyvab
@lazyvab ¡Con toda honestidad, no tengo ni idea! Ya no escribo Java, pero solo puedo presumir que fue algo que debí haber escuchado. He estado programando en otros lenguajes durante los últimos años, pero no veo por qué sería perjudicial usar esto en producción. Además System.out.printlnes para depurar de todos modos, ¿verdad?
jskidd3
1
Depende de lo que quieras decir con "eficiente". En cuanto al rendimiento, ambas versiones son iguales ya que tienen el mismo código de bytes.
""+b
. Es más lento pero más eficiente para el desarrollador. Si desea un rendimiento superior, puede escribir los datos a / desde un ByteBuffer directo, es decir, cambiar lo que hace con el String para que no lo necesite.null
comofalse
, puede usarString.format("%b", b)
Respuestas:
No creo que haya una diferencia de rendimiento significativa entre ellos, pero preferiría la primera forma.
Si tiene una
Boolean
referencia,Boolean.toString(boolean)
arrojaráNullPointerException
si su referencia esnull
. Como se desempaqueta la referenciaboolean
antes de pasarla al método.Mientras que, el
String.valueOf()
método que muestra el código fuente, hace lanull
verificación explícita :Solo prueba este código:
Para booleano primitivo, no hay diferencia.
fuente
Si está seguro de que su valor no
null
es, puede utilizar la tercera opción, que esy su código se parece a
Si desea ser seguro para nulos, use
String.valueOf(b)
el código que se parececomo puede ver, primero probará
null
y luego invocará eltoString()
método en su objeto.Llamar
Boolean.toString(b)
invocaráque es un poco más lento que
b.toString()
porque JVM necesita primero desempaquetarBoolean
a loboolean
que se pasará como argumentoBoolean.toString(...)
, mientras queb.toString()
reutiliza elprivate boolean value
campo en elBoolean
objeto que mantiene su estado.fuente
fuente
Si esto es con el propósito de obtener un valor "verdadero" constante, en lugar de "Verdadero" o "VERDADERO", puede usar esto:
fuente
Si está buscando una forma rápida de hacer esto, por ejemplo, depurando, simplemente puede concatenar una cadena vacía en el booleano:
Sin embargo, recomiendo encarecidamente utilizar otro método para el uso de producción. Esta es una solución rápida y sencilla que resulta útil para depurar.
fuente
System.out.println
es para depurar de todos modos, ¿verdad?Depende de lo que quieras decir con "eficiente". En cuanto al rendimiento, ambas versiones son iguales ya que tienen el mismo código de bytes.
fuente
Si ve la implementación de ambos métodos, se ven iguales.
String.valueOf (b)
Boolean.toString (b)
Entonces, ambos métodos son igualmente eficientes.
fuente