В чем разница между Boolean.TRUE и true в Java?

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

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

boolean boolVar = Boolean.TRUE;

представляется корректным.

Ответ 1

Причина

boolean boolVar = Boolean.TRUE;

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

Boolean boolVar = true;

Ответ 2

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

Что касается причины:

boolean boolVar = Boolean.TRUE;

имеет значение Autoboxing and 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;

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

boolean boolVar = Boolean.TRUE.booleanValue();

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

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

Boolean trueBool = new Boolean(true); 

Ответ 3

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

  • Я хочу сохранить их в Коллекциях
  • Я хотел бы иметь понятие null. примитивный булев может представлять только два состояния.

Ответ 4

true имеет примитивный тип boolean, а Boolean.TRUE - объект boolean, который обертывает значение true.

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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