Boolean: это не создает новых экземпляров Boolean, поэтому производительность выше (и меньше сборщик мусора). Он повторно два экземпляра либо Boolean.TRUEили Boolean.FALSE.
логическое: экземпляр не нужен, вы используете примитивный тип.
Автобокс также может быть использован, но он имеет стоимость производительности.
Я предлагаю использовать его только тогда, когда вам придется кастовать себя, а не тогда, когда каста можно избежать.
не будет ли назначение Boolean.valueOf boolaen2 автоматически распаковываться? Я не вижу разницы в parseBoolean здесь.
Алекс Фейнман
9
Самая большая проблема заключается в том, что Boolean не будет исключать, когда он видит то, что не должен принимать. Он вернет true для всего, что он видит как «true», и вернет false для всего остального . Если вы пытаетесь принудительно сопоставить строку с соответствующим логическим значением, вам придется добавить дополнительную логику, чтобы вручную отлавливать недопустимые случаи.
Брэндон Белвин
Что boolean boolean2 = Boolean.valueOf("true");
делать,
1
если объект String имеет значение null, то Boolean.valueOf (String) вернет false. Но Boolean также может содержать нулевое значение. Можете ли вы предоставить какую-либо помощь для этого.
amit kate
90
Вы должны быть осторожны при использовании Boolean.valueOf (строка) или Boolean.parseBoolean (строка) . Причина этого заключается в том, что методы всегда будут возвращать false, если строка не равна «true» (регистр игнорируется).
Например:
Boolean.valueOf("YES")->false
Из-за этого поведения я бы порекомендовал добавить некоторый механизм, чтобы гарантировать, что строка, которая должна быть переведена в логическое значение, соответствует указанному формату.
Например:
if(string.equalsIgnoreCase("true")|| string.equalsIgnoreCase("false")){Boolean.valueOf(string)// do something }else{// throw some exception}
Это лучший пример, который я видел, и что должно было быть реализовано в логическом типе для начала. Создание исключения для недопустимого логического значения важно для многих приложений.
Брэндон Белвин
2
Нет, это не совсем так. вот базовая реализация parseBoolean: public static static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
electricbah
Хех ... Если вам нужно написать такой код, то вам не нужно вызывать Boolean.valueOf. Вместо этого вы можете просто реструктурировать этот оператор if, чтобы он делал то, что вы хотите ;-)
22
Boolean b =Boolean.valueOf(string);
Значение btrue, если строка не является нулевой и равна true(игнорируя регистр).
publicstaticboolean stringToBool(String s){
s = s.toLowerCase();Set<String> trueSet =newHashSet<String>(Arrays.asList("1","true","yes"));Set<String> falseSet =newHashSet<String>(Arrays.asList("0","false","no"));if(trueSet.contains(s))returntrue;if(falseSet.contains(s))returnfalse;thrownewIllegalArgumentException(s +" is not a boolean.");}
Мой способ преобразования строки в логическое значение.
Чтобы получить логическое значение строки, попробуйте это:
publicboolean toBoolean(String s){try{returnBoolean.parseBoolean(s);// Successfully converted String to boolean}catch(Exception e){returnnull;// There was some error, so return null.}}
Мы создали библиотеку soyuz-to, чтобы упростить эту проблему (конвертировать X в Y). Это просто набор SO ответов на аналогичные вопросы. Может быть странно использовать библиотеку для такой простой задачи, но она действительно помогает во многих подобных случаях.
Разбирает строковый аргумент как логическое значение. Возвращаемое логическое значение представляет значение true, если строковый аргумент не nullравен и равен (без учета регистра) строке " true".
Параметры:
s - строка, содержащая логическое представление для анализа
Ответы:
Попробуйте (в зависимости от того, какой тип результата вы хотите):
Преимущество:
Boolean.TRUE
илиBoolean.FALSE
.Официальная документация находится в Javadoc .
ОБНОВЛЕНО:
Автобокс также может быть использован, но он имеет стоимость производительности.
Я предлагаю использовать его только тогда, когда вам придется кастовать себя, а не тогда, когда каста можно избежать.
источник
boolean boolean2 = Boolean.valueOf("true");
Вы должны быть осторожны при использовании Boolean.valueOf (строка) или Boolean.parseBoolean (строка) . Причина этого заключается в том, что методы всегда будут возвращать false, если строка не равна «true» (регистр игнорируется).
Например:
Из-за этого поведения я бы порекомендовал добавить некоторый механизм, чтобы гарантировать, что строка, которая должна быть переведена в логическое значение, соответствует указанному формату.
Например:
источник
Значение
b
true, если строка не является нулевой и равнаtrue
(игнорируя регистр).источник
Помимо превосходного ответа KLE, мы также можем сделать что-то более гибкое:
(вдохновленный ответом Злахо ... :-))
источник
источник
Что ж, как и сейчас, в январе 2018 года, лучший способ для этого - использовать Apache
BooleanUtils.toBoolean
.Это преобразует любую логическую строку в логическую, например, Y, да, true, N, нет, false и т. Д.
Действительно удобно!
источник
Мой способ преобразования строки в логическое значение.
источник
Результат:
источник
Вот как я это сделал:
"1##true".contains( string )
Для моего случая это в основном либо 1, либо правда. Я использую хеши в качестве разделителей.
источник
Чтобы получить логическое значение строки, попробуйте это:
Если есть ошибка, он вернет ноль. Пример:
источник
parseBoolean(String s)
не исключение, согласно Javadoc.Почему бы не использовать регулярные выражения?
источник
Мы создали библиотеку soyuz-to, чтобы упростить эту проблему (конвертировать X в Y). Это просто набор SO ответов на аналогичные вопросы. Может быть странно использовать библиотеку для такой простой задачи, но она действительно помогает во многих подобных случаях.
Пожалуйста, проверьте это - это очень просто и имеет много других полезных функций
источник
Посетите http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx
Это даст вам представление о том, что делать.
Вот что я получаю из документации по Java :
источник
Вы можете напрямую установить логическое значение, эквивалентное любой строке по классу System, и получить к нему доступ в любом месте.
источник