Каково различие между булевской переменной и булевской переменной в Java? [дубликат]

Нет никакого неявного преобразования от Nullable<bool> до bool. Там неявное преобразование от bool до Nullable<bool>, и это - то, что происходит (в терминах языка) к каждой из bool констант в первой версии. bool operator==(Nullable<bool>, Nullable<bool> оператор затем применяется. (Это не вполне то же как другие снятые операторы - результат всего bool, не Nullable<bool>.)

, Другими словами, выражение 'fred == ложь' имеет тип bool, тогда как выражение 'fred' имеет тип Nullable<bool> следовательно, Вы не можете использовать его в качестве "если" выражение.

РЕДАКТИРОВАНИЕ: Для ответа на комментарии никогда нет неявного преобразования от Nullable<T> до [1 110] и на серьезном основании - неявные преобразования не должны выдавать исключения, и если Вы не хотите null быть неявно преобразованными в [1 112] много еще нет, который мог быть сделан.

кроме того, если бы там были неявные преобразования оба окольных пути, выражение как "nullable + не допускающий NULL-значения" очень сбивало бы с толку (для типов, которые поддерживают +, как [1 113]). Оба + (T?, T?) и + (T, T) было бы доступно, в зависимости от которого операнда были преобразованы - но результаты могли очень отличаться!

я - 100% позади решения только иметь явное преобразование от [1 114] до [1 115].

56
задан Shog9 26 April 2010 в 18:54
поделиться

7 ответов

Я не уверен, имеет ли значение фактор GWT, но в целом:

boolean - это примитивный тип java, тогда как Boolean - это объект / ссылочный тип, который является оболочкой для логического

Преобразование между примитивами и такими объектами, как этот, известно как упаковка / распаковка.

Дополнительная информация:

http://javaeye.wordpress.com/2008/06/17/boxing-and-unboxing-conversion/

Почему коробка, спросите вы?

http: // java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html

http://www.javapractices.com/topic/TopicAction.do?Id=197

34
ответ дан 26 November 2019 в 17:05
поделиться

В Java есть примитивные типы (int, boolean, float и т. Д.), И каждый раз, когда вы хотите использовать их как экземпляр объекта, они заключаются в связанный тип класса. Например, логические значения обертываются логическими значениями, int как Integer и т. Д.

Это тоже имеет свои преимущества. boolean не имеет вспомогательных методов (поскольку это не класс), но Boolean имеет. Итак, если вы хотите преобразовать строку в логическое значение, вы можете попробовать Boolean.valueOf ("true").

Надеюсь, что это поможет.

5
ответ дан 26 November 2019 в 17:05
поделиться

Это довольно просто и то же самое для GWT и Java:

  • логическое значение может быть да или нет
  • Логическое значение может быть да, нет или NULL.

Поэтому, если вам не нужен NULL (например, когда вы загружаете поле из базы данных, и вы хотите, чтобы NULL отличался от false), используйте логическое значение.

107
ответ дан 26 November 2019 в 17:05
поделиться

В Java логическое значение является литералом истина или ложь , а логическое значение является объектная оболочка для логического .

Редко есть причина использовать логическое вместо логического , за исключением случаев, когда требуется ссылка на объект, например как в List .

Boolean также содержит статический метод parseBoolean (String s) , о котором вы, возможно, уже знаете.

10
ответ дан 26 November 2019 в 17:05
поделиться

Что касается GWT, в GWT они такие же, как и в java.
boolean является примитивом, а Boolean - в оболочке объекта.

1
ответ дан 26 November 2019 в 17:05
поделиться

Согласно документации по эмуляции GWT JRE ( http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html ) эти методы поддерживаются Логический тип: Boolean (логическое), Boolean (String), parseBoolean (String), toString (логическое), valueOf (логическое), valueOf (String), booleanValue (), compareTo (Boolean), equals (Object), hashCode (), toString ( )

относительно разницы между типами объектов boolean и Boolean. Логические объекты могут находиться в 3 состояниях, поэтому это не совсем то же самое. Но если это имеет значение для GWT (с точки зрения производительности), я понятия не имею, я предполагаю, что это не имеет большого значения, поскольку компилятор GWT оптимизирует код, и большинство операций можно просто сопоставить с собственными логическими операциями javascript.

Но как обычно: чтобы быть уверенным, что вы должны измерить (и принять во внимание, что это может отличаться в зависимости от того, какой браузер / версия вы измеряете).

Тип объекта Boolean обычно не используется очень часто, поскольку собственный тип boolean более естественно (вы не

1
ответ дан 26 November 2019 в 17:05
поделиться

Поскольку логическое значение может быть нулевым, его можно использовать для отложенной загрузки.

if(hasRoots == null){
   calculateRoots();
}
6
ответ дан 26 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: