Я предпочитаю ""+b. Это медленнее, но более эффективно для разработчика. Если вам нужна максимальная производительность, вы можете записывать данные в / из прямого ByteBuffer, то есть изменить то, что вы делаете со строкой, чтобы она вам не понадобилась.
Питер Лоури
Также, если вы хотите лечить nullкак false, можете использоватьString.format("%b", b)
ЖекаКозлов
Ответы:
145
Я не думаю, что между ними будет какая-то значительная разница в производительности, но я бы предпочел первый способ.
Если у вас есть Booleanссылка, Boolean.toString(boolean)выкину, NullPointerExceptionесли ваша ссылка есть null. Поскольку ссылка распаковывается booleanперед передачей методу.
В то время String.valueOf()как метод, как показывает исходный код, выполняет явную nullпроверку:
так что, как вы видите, он сначала проверит, nullа затем вызовет toString()метод вашего объекта.
Вызов Boolean.toString(b)вызовет
publicstaticString toString(boolean b){return b ?"true":"false";}
который является немного медленнее , чем b.toString()так JVM должна первой UnboxBoolean с booleanкоторым будет передан в качестве аргумента Boolean.toString(...), а b.toString()повторно использует private boolean valueполе в Booleanобъекте , который удерживает свое состояние.
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--------------
Если вы ищете быстрый способ сделать это, например отладку, вы можете просто объединить пустую строку с логическим значением:
System.out.println(b+"");
Однако я настоятельно рекомендую использовать другой метод для производственного использования. Это простое быстрое решение, которое полезно для отладки.
Не могли бы вы пояснить, почему вы не рекомендуете использовать его в производственной среде? Может ли это выйти из строя в каком-то сценарии?
lazyvab
@lazyvab Честно говоря понятия не имею! Я больше не пишу Java, но могу только предположить, что это было то, что я, должно быть, слышал. Последние несколько лет я программировал на других языках, но не понимаю, почему использование этого в продакшене может повредить. Кроме того, все System.out.printlnравно для отладки, верно?
jskidd3
1
Зависит от того, что вы подразумеваете под «эффективным». По производительности обе версии такие же, как и один и тот же байт-код.
""+b
. Это медленнее, но более эффективно для разработчика. Если вам нужна максимальная производительность, вы можете записывать данные в / из прямого ByteBuffer, то есть изменить то, что вы делаете со строкой, чтобы она вам не понадобилась.null
какfalse
, можете использоватьString.format("%b", b)
Ответы:
Я не думаю, что между ними будет какая-то значительная разница в производительности, но я бы предпочел первый способ.
Если у вас есть
Boolean
ссылка,Boolean.toString(boolean)
выкину,NullPointerException
если ваша ссылка естьnull
. Поскольку ссылка распаковываетсяboolean
перед передачей методу.В то время
String.valueOf()
как метод, как показывает исходный код, выполняет явнуюnull
проверку:Просто проверьте этот код:
Для примитивного логического значения разницы нет.
источник
Если вы уверены, что ваше значение не соответствует
null
действительности, вы можете использовать третий вариант:и его код выглядит как
Если вы хотите быть нулевым, используйте
String.valueOf(b)
какой код выглядит кактак что, как вы видите, он сначала проверит,
null
а затем вызоветtoString()
метод вашего объекта.Вызов
Boolean.toString(b)
вызоветкоторый является немного медленнее , чем
b.toString()
так JVM должна первой UnboxBoolean
сboolean
которым будет передан в качестве аргументаBoolean.toString(...)
, аb.toString()
повторно используетprivate boolean value
поле вBoolean
объекте , который удерживает свое состояние.источник
источник
Если это делается с целью получения постоянного «истинного» значения, а не «Истина» или «ИСТИНА», вы можете использовать это:
источник
Если вы ищете быстрый способ сделать это, например отладку, вы можете просто объединить пустую строку с логическим значением:
Однако я настоятельно рекомендую использовать другой метод для производственного использования. Это простое быстрое решение, которое полезно для отладки.
источник
System.out.println
равно для отладки, верно?Зависит от того, что вы подразумеваете под «эффективным». По производительности обе версии такие же, как и один и тот же байт-код.
источник
Если вы видите реализацию обоих методов, они выглядят одинаково.
String.valueOf (b)
Boolean.toString (b)
Так что оба метода одинаково эффективны.
источник