В чем разница между булевыми.Правда и правда на Яве?



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



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



boolean boolVar = Boolean.TRUE;


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

655   7  

7 ответов:

Причина

boolean boolVar = Boolean.TRUE;

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

Boolean boolVar = true;

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

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

boolean boolVar = Boolean.TRUE;

Действительно является из-заАвтобоксинга и распаковки .

Короче говоря, компилятор Java, когда он видит, что вы обрабатываете примитив как объект, такой как
List<Boolean> listOfBoolean = new ArrayList<Boolean>();
boolean someBool = true;
listOfBoolean.add(someBool);

Это будет автоматически оберните его, или autobox it

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); 

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.