Eu prefiro ""+b. É mais lento, mas mais eficiente para o desenvolvedor. Se você deseja desempenho superior, pode gravar os dados de / para um ByteBuffer direto, ou seja, alterar o que você faz com a String para que não seja necessário.
Peter Lawrey
Além disso, se quiser tratar nullcomo false, você pode usarString.format("%b", b)
ZhekaKozlov
Respostas:
145
Eu não acho que haveria qualquer diferença significativa de desempenho entre eles, mas eu preferiria a 1ª forma.
Se tiver uma Booleanreferência, Boolean.toString(boolean)jogará NullPointerExceptionse for sua referência null. Como a referência é desempacotada booleanantes de ser passada para o método.
Enquanto o String.valueOf()método , como mostra o código-fonte, faz a nullverificação explícita :
então, como você vê, ele primeiro testará nulle depois chamará o toString()método em seu objeto.
Chamar Boolean.toString(b)irá invocar
publicstaticString toString(boolean b){return b ?"true":"false";}
que é um pouco mais lento do que b.toString()uma vez que a JVM precisa primeiro desencaixotarBoolean para o booleanqual será passado como argumento Boolean.toString(...), enquanto b.toString()reutiliza o private boolean valuecampo no Booleanobjeto que mantém seu 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--------------
Você pode explicar por que não recomenda o uso para uso em produção? Pode falhar em algum cenário?
lazyvab
@lazyvab Com toda a franqueza, não faço ideia! Não escrevo mais Java, mas só posso presumir que é algo que devo ter ouvido. Eu tenho programado em outras linguagens nos últimos anos, mas não consigo ver por que usar isso na produção faria mal. Além disso, System.out.printlné para depuração de qualquer maneira, certo?
jskidd3
1
Depende do que você entende por "eficiente". Em termos de desempenho, ambas as versões são iguais, pois são o mesmo bytecode.
""+b
. É mais lento, mas mais eficiente para o desenvolvedor. Se você deseja desempenho superior, pode gravar os dados de / para um ByteBuffer direto, ou seja, alterar o que você faz com a String para que não seja necessário.null
comofalse
, você pode usarString.format("%b", b)
Respostas:
Eu não acho que haveria qualquer diferença significativa de desempenho entre eles, mas eu preferiria a 1ª forma.
Se tiver uma
Boolean
referência,Boolean.toString(boolean)
jogaráNullPointerException
se for sua referêncianull
. Como a referência é desempacotadaboolean
antes de ser passada para o método.Enquanto o
String.valueOf()
método , como mostra o código-fonte, faz anull
verificação explícita :Basta testar este código:
Para booleano primitivo, não há diferença.
fonte
Se tiver certeza de que seu valor não é,
null
você pode usar a terceira opção, que ée seu código parece
Se você quiser ser null-safe, use o
String.valueOf(b)
código que se parece comentão, como você vê, ele primeiro testará
null
e depois chamará otoString()
método em seu objeto.Chamar
Boolean.toString(b)
irá invocarque é um pouco mais lento do que
b.toString()
uma vez que a JVM precisa primeiro desencaixotarBoolean
para oboolean
qual será passado como argumentoBoolean.toString(...)
, enquantob.toString()
reutiliza oprivate boolean value
campo noBoolean
objeto que mantém seu estado.fonte
fonte
Se isso for com o propósito de obter um valor "verdadeiro" constante, em vez de "Verdadeiro" ou "VERDADEIRO", você pode usar isto:
fonte
Se você está procurando uma maneira rápida de fazer isso, por exemplo, depurando, você pode simplesmente concatenar uma string vazia no booleano:
No entanto, eu recomendo fortemente o uso de outro método para uso em produção. Esta é uma solução simples e rápida, útil para depuração.
fonte
System.out.println
é para depuração de qualquer maneira, certo?Depende do que você entende por "eficiente". Em termos de desempenho, ambas as versões são iguais, pois são o mesmo bytecode.
fonte
Se você observar a implementação de ambos os métodos, eles terão a mesma aparência.
String.valueOf (b)
Boolean.toString (b)
Portanto, os dois métodos são igualmente eficientes.
fonte