В чем разница между булевыми.Правда и правда на Яве?
PS: Я понимаю разницу между" истинным " и истинным.
Править:
Я также понимаю, что это булево.TRUE-это оболочка для примитивного true, мой вопрос тогда - почему примитивное boolean принимает Boolean.Правда как ценность?
Например,
boolean boolVar = Boolean.TRUE;
, по-видимому, является правильным утверждением.
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 ситуации, в которых я использую обертки над примитивами
- я хочу хранить их в коллекциях
- я хотел бы иметь понятие 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)vsif(a.equals(b)), повышает производительность и следует за преобразованием.BooleanилиIntegerработает лучше, чемbooleanиint. То есть, если у вас есть ситуация, когда вы хотите разрешитьnullв качестве значения. Это приводит к ряду нулевых проверок, но это предотвращаетfalseот проскальзывания, когда
Comments