Зачем менять логическое значение примитива на логическую ссылку на объект? - PullRequest
1 голос
/ 28 декабря 2011

Я читаю Эффективную Java, и в первой главе первый пример изменяет логическое значение примитива на ссылку на логический объект:

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

Мои вопросы:

  1. В чем разница между значением логического примитива и ссылкой на логический объект?

  2. В чем причина этого?

Ответы [ 5 ]

4 голосов
/ 28 декабря 2011

Вы не можете использовать примитивы в обобщениях. Вы не можете сделать это:

List<boolean> x;

но вы можете сделать это:

List<Boolean> x;
2 голосов
/ 28 декабря 2011

Помните, что примитив логический имеет два возможных значения: true или false . У объекта Boolean их три: true , false и null . Это иногда очень полезно.

1 голос
/ 28 декабря 2011

Примитив нельзя использовать во всех контекстах. Например, при использовании в любом из классов коллекции требуется тип объекта. Во всяком случае, в основном это делается для вас с помощью автобокса. Но вы все равно должны знать об этом, иначе вас укусят в один момент.

Другое дело, что тип объекта может содержать ноль. В случаях, когда вам необходимо различать истину, ложь и неизвестность, использование Boolean может быть простым решением.

0 голосов
/ 28 декабря 2011

Я считаю, что наиболее распространенные варианты использования Boolean предназначены для использования в объекте обобщенной функции и, к сожалению, для отражения.

Например:

boolean exists = java.security.AccessController.doPrivileged(
    new PrivilegedAction<>() {
        public Boolean run() {
            return file.exists();
        }
    }
);

(Вероятно, меньше стандартного в Java SE 8.)

0 голосов
/ 28 декабря 2011

1> Boolean - это класс оболочки для boolean

Классы оболочки используются для представления примитивных значений, когда требуется объект. Википедия

Оболочка class используется для применения некоторых методов и вычислений, что невозможно при использовании примитивных типов данных.

2> это зависит от ситуаций.

...