В чем разница между 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
, когда