В чем разница между Boolean.TRUE и true в Java? - PullRequest
27 голосов
/ 04 февраля 2011

PS: я понимаю разницу между "истиной" и истиной.

Edit: Я также понимаю, что Boolean.TRUE является оберткой для примитива true, поэтому мой вопрос таков: почему примитив boolean принимает Boolean.TRUE в качестве значения? Например,

boolean boolVar = Boolean.TRUE;

представляется правильным утверждением.

Ответы [ 7 ]

29 голосов
/ 04 февраля 2011

Причина

boolean boolVar = Boolean.TRUE;

работает благодаря autounboxing , функции Java 5, которая позволяет при необходимости автоматически конвертировать объект-оболочку в его примитивный эквивалент. Также возможно обратное, autoboxing :

Boolean boolVar = true;
26 голосов
/ 04 февраля 2011

Как указывалось в предыдущих ответах, Boolean.TRUE возвращает объект обертку с логическим значением true, поэтому для контекстов, где нам нужно обрабатывать логические объекты, подобные (например, имеющие * 1005)* логических значений), мы могли бы использовать Boolean.TRUE или Boolean.FALSE

. Почему:

boolean boolVar = Boolean.TRUE;

действительно из-за Autoboxing и Unboxing .

Короче говоря, Java-компилятор, когда видит, что вы рассматриваете примитив как объект, такой как

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(someBool);

, автоматически оборачивает его или autobox это

List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(Boolean.valueOf(someBool));

И если он увидит, что вы рассматриваете объект-оболочку, например Boolean.TRUE, как примитив, например:

boolean boolVar = Boolean.TRUE;

, он преобразует его в примитив или распаковать это, как если бы мы это сделали:

boolean boolVar = Boolean.TRUE.booleanValue();

Когда-то вам приходилось делать это вручную, но сейчас, к лучшему или к худшему, в основном это делаетсяЗабота о вас.

И если вам интересно, почему вообще есть Boolean.TRUE, это потому, что нет необходимости иметь плавающие вокруг множества логических объектов для true.Так как логическое значение может быть только одним из двух значений, проще просто иметь их как константы, а не каждый раз, когда кому-то нужно упаковать true:

Boolean trueBool = new Boolean(true); 
6 голосов
/ 04 февраля 2011

Boolean.TRUE является объектом-оболочкой и синглтоном. true - буквальная константа. Ниже приведены 2 ситуации, когда я использую обертки над примитивами

  1. Я хочу хранить их в коллекциях
  2. Я бы хотел иметь понятие null . примитивное логическое значение может представлять только два состояния.
3 голосов
/ 04 февраля 2011

true относится к примитиву boolean, а Boolean.TRUE - к Boolean объекту, заключающему в себе значение true.

1 голос
/ 08 августа 2016

Примитивные типы, (например, boolean), настоятельно предпочтительнее классов (например, Boolean) по ряду причин.Смотрите обсуждение здесь.https://softwareengineering.stackexchange.com/questions/203970/when-to-use-primitive-vs-class-in-java. Примитивный тип делает код более читабельным, предотвращает ошибки указателя, такие как if(a==b) против if(a.equals(b)), повышает производительность и следует за преобразованием.

Существует один случай, когда Boolean или Integer работает лучше, чем boolean и int.Это если у вас есть ситуация, когда вы хотите разрешить null в качестве значения.Это приводит к ряду нулевых проверок, но предотвращает проскальзывание false, когда

0 голосов
/ 14 декабря 2013

Вы также можете получить объяснение по ссылке из Википедии ниже.

Все классы примитивных оболочек в Java являются неизменяемыми.J2SE 5.0 ввел автобокс примитивных типов в их объект-оболочку и автоматическую распаковку объектов-оболочек в их примитивное значение - неявное преобразование между объектами-обертками и значениями примитивов.

Подробнее о http://en.wikipedia.org/wiki/Primitive_wrapper_class

0 голосов
/ 04 февраля 2011

Boolean.TRUE - это ссылка на объект класса Boolean, в то время как true - просто значение примитивного логического типа.Такие классы, как Boolean, часто называют «классами-обертками» и используются, когда вам нужен объект вместо примитивного типа (например, если вы храните его в структуре данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...