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

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

— Я тебе расскажу про тип 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.

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