Нужно ли проверять нулевое значение с обеих сторон условия ИЛИ? - PullRequest
2 голосов
/ 04 сентября 2011

Рассмотрим переменную-член:

String foo;

Я хочу позвонить setFoo, только если foo ранее не был установлен или в настоящее время пуст.

Для этой цели яне уверен, что этого достаточно:

if(foo==null || foo.isEmpty()) {

  setFoo(foo);

}

Или безопаснее также проверить наличие нуля с другой стороны условия ИЛИ:

if(foo==null || (foo!=null && foo.isEmpty())) {

  setFoo(foo);

}

Ответы [ 5 ]

11 голосов
/ 04 сентября 2011

if(foo==null || foo.isEmpty()) достаточно.

В состоянии логического ИЛИ Java будет оценивать вторую часть только в том случае, если первая часть ложна.

3 голосов
/ 04 сентября 2011

Нет, первый фрагмент в порядке.

В Java (и во многих похожих языках, таких как C или C ++), логические операторы && и || выполняют оценку короткого замыкания . В случае ||, если левый операнд равен true, то правый операнд не будет оцениваться.

1 голос
/ 04 сентября 2011

Добро пожаловать в переполнение стека

Операторами типа ||, && в Java являются оператор короткого замыкания , вторая часть выражения будет проверяться только тогда, когда первой части недостаточно для определения значения

так, if(foo==null || foo.isEmpty()) достаточно.

0 голосов
/ 04 сентября 2011

Я считаю более элегантным использовать StringUtils.isBlank(foo) (из apache commons-lang), поэтому вам не нужен || на все.

0 голосов
/ 04 сентября 2011
if (foo == null || foo.isEmpty()) setFoo(foo);

Работает нормально.В этом случае, если foo равно нулю, будет вызван setFoo(foo).Если foo не равно нулю, а foo пусто, setFoo(foo) также будет вызвано.

...