Boolean

Открыта

— Привет, Амиго!

— Привет, Ким.

— Я тебе расскажу про тип Boolean. Это тоже «обертка» над типом boolean и он прост, как доска. Немного упрощенный код класса Boolean:

Код
class Boolean
{
 public static final Boolean TRUE = new Boolean(true);
 public static final Boolean FALSE = new Boolean(false);

 private final boolean value;

 public Boolean(boolean value)
 {
  this.value = value;
 }

 public boolean booleanValue()
 {
  return value;
 }

 public static Boolean valueOf(boolean b)
 {
  return (b ? TRUE : FALSE);
 }
}

— Т.е. класс просто является «оберткой» над типом boolean.

— Ага. А еще у него есть две константы TRUE и FALSE, которые являются аналогами примитивных значений true/false.

С автобоксингом у него тоже все просто:

Код Что происходит на самом деле
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

А вот как происходят сравнения между типами boolean и Boolean:

Пример
boolean a = true;
Boolean b = true; //будет равен Boolean.TRUE
Boolean c = true; //будет равен Boolean.TRUE

a == b; //true (сравниваются как примитивы по значению)
a == c; //true (сравниваются как примитивы по значению)
b == c; //true (сравниваются по ссылке, но указывают на один и тот же объект)

Если очень нужно создать независимый объект Boolean, то надо создать его явно:

Пример
boolean a = true;
Boolean b = new Boolean(true); //новый объект Boolean
Boolean c = true; //будет равен Boolean.TRUE

a == b; //true (сравниваются как примитивы по значению)
a == c; //true (сравниваются как примитивы по значению)
b == c; //false (сравниваются по ссылке, указывают на различные объекты)

Собственно на этом все.

— Да, твои лекции покороче, чем у Билаабо.

А можно использовать Boolean внутри if ?

Boolean less = (2<3);
if (less)
{
….
}

— Да, только не забудь, что если less будет null, то выкинется исключение NullPointer.

— Да, я это уже понял. Только не держу все время в голове.

Комментарии (20)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей
Уровень 4
7 мая 2025, 10:34
Как про меня. Я все это знаю. Только в голове все время не держу.
Denis Odesskiy Full Stack Developer
15 июня 2024, 23:32
Советую открыть класс Boolean и посмотреть как он устроен внутри, лекция хорошая, но слишком уж " немного упрощенный код" упрощён по-моему, ну понятно чтобы саму суть показать. Но там много методов полезных еще, а сам класс и вправду очень простой...
Алексей
Уровень 40
Expert
26 февраля 2024, 17:53
Две последние лекции просто супер)Все в одном месте
АндрейРаботает в КАМАЗ
26 ноября 2021, 12:59
непонятно что делает метод
public boolean booleanValue() {
 return value;
}
более понятно, если метод называется
public boolean getBooleanValue()  {
 return value;
}
Kurama
Уровень 50
2 декабря 2022, 15:45
Так boolean же этим и отличается от остальных примитивов: isAlive() вместо getAlive() или getIsAlive() С обёртками то же самое
Denis Odesskiy Full Stack Developer
15 июня 2024, 23:36
public boolean booleanValue() {
 return value;
}
Этот метод часть класса Boolean, делает то что в нем написано. Назвали его так разработчики Java. Назови его они getBooleanValue(), это как минимум бы противоречило конвенции об именовании...
19 апреля 2021, 08:35
мне в голову не приходит ни одного примера на кой логику оборачивать? если только не хочется сильно усложнить жизнь коллегам или тому самому маньяку который знает где я живу.
Montana~
Уровень 51
13 мая 2021, 06:10
Был такой случай у меня, делал WEB-приложение, в запросе на сервер отправлял JSON, который маппился на Model. Так вот, если в сущности (Model) булево поле не обернуто в Boolean, то при маппинге JSON'а это булево поле по дефолту примет значение false, а если обернуть в Boolean, то поле будет по дефолту null.
Kirill
Уровень 46
5 января 2025, 15:22
Каким образом без использования класса-обертки ты примитивный boolean поместишь в коллекцию?
Дмитрий
Уровень 35
22 мая 2018, 04:17
на всякий случай напомню, что в Boolean за TRUE считается передача в конструктор значения "true" в любом регистре, всё остальное интерпретируется как FALSE: new Boolean("TrUe"); // true new Boolean("TrUE"); // true new Boolean("1"); // false new Boolean("false"); // false
egor44134
Уровень 36
25 октября 2017, 22:08
final class Boolean
24 апреля 2017, 14:00
Не понимаю почему не сделали для String и для Number сравнение именно по значениям через "=="... Было бы очень удобно и интуитивно сравнивать if (str == "some text") { ... } Если уж так надо сравнивать ссылки, то до явно по адресу типа if (SomeObject.address() == AnOther.address) { ... }
Семен Киселев
Уровень 40
4 мая 2017, 15:15
Почитайте про пул строк..
Artem Novikov
Уровень 40
15 мая 2017, 22:58
Напишите замечание в компанию Oracle.
Данил СуетинFull Stack Developer в Deutsche Bank
23 мая 2017, 20:39
Согласен. Но наверняка есть резоны, вряд ли такое простое решение не нашло бы стронников, не будь каких-то нюансов, которые мы выясним позже.
Константин
Уровень 40
28 мая 2017, 21:21
Думаю, что нюансы сложись так исторически, и переработка языка на "как удобней" наносит ущерб обратной совместимости.
Nikita KoliadinFull Stack Developer в Приватбанк
28 июня 2018, 14:23
В Java нету перегрузки операторов. По этой причине.
Андрей
Уровень 2
Expert
4 декабря 2019, 21:34
Для String'a есть. Надо уметь пользоваться...intern()
barracuda
Уровень 41
Expert
2 ноября 2020, 21:57
Спасибо, что напомнили об intern() !!!
Pavel KurchavovSupport Engineer в Ozon.ru
15 марта 2021, 08:00
В Котлин есть такая штука, сравнивать объекты через ==, удобно)