Object.equals (Boolean, Boolean) против логических операторов (Java) - PullRequest
2 голосов
/ 20 сентября 2019

Прежде всего, извинения за этот самый основной вопрос.Я довольно новичок в stackoverflow, но я ломаю голову над этим и хотел бы немного просветления.

Хорошо, сегодня на работе код меня и моего коллеги был проверен коллегами, и ему было приказано заменить это ..

Boolean isOpen;
*some processing that involves altering the value of isOpen*
if (!isOpen){
...
}

на это ..

if (Objects.equals(Boolean.FALSE, isOpen)){
...
}

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

В чем я не вижу разницы между использованием оператора NOT и Objects.equals () в этом контексте.Я знаю, что во время выполнения isOpen будет распакован.Оба все еще чувствительны к NullPointerException, так в чем же разница?Это своего рода бьет цель логических операторов.

1 Ответ

8 голосов
/ 20 сентября 2019

В классе Object нет static equals метода.

Вы, вероятно, имели в виду Objects.equals().Преимущество использования Objects.equals(Boolean.FALSE, isOpen) вместо !isOpen состоит в том, чтобы избежать NullPointerException, когда isOpen равно null.

Тем не менее, я бы предпочел изменить isOpen с Boolean на boolean если возможно, и соблюдайте условие !isOpen.

...