Подтвердить что ты не робот

Проверка того, является ли объект нулевым одновременно с значением одного из его полей

Какое из них было бы правильным?

if(dialog != null && dialog.isShowing){}

if(dialog.isShowing && dialog != null){}

if(dialog != null){
   if(dialog.isShowing){}
}
4b9b3361

Ответ 1

Первая и третья из них подходят для использования, потому что они не будут обрабатывать нулевую проверку. Второй может привести к NullPointerException, поскольку он ссылается на dialog, прежде чем вы проверите, имеет ли он значение null.

Ответ 2

& & оператор в Java перестанет оценивать (слева направо), как только он встретит ложь. Поэтому в

if(dialog != null && dialog.isShowing){}

dialog.isShowing() не будет вызываться, если диалог является нулевым и, следовательно, "безопасным" для использования.

Это:

if(dialog != null){
   if(dialog.isShowing){}
}

также будет работать, но, как правило, вложенные if-утверждения, подобные этому, устраняются, поскольку он уменьшает читаемость.

Ответ 3

Несмотря на то, что на все ответили ради полноты: То, как Java оценивает условные предложения, называется Оценка коротких замыканий. Это означает, что после утверждения условия условия дальнейшие предложения не будут оцениваться.

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

Ответ 4

Это ярлык логики. Когда первое выражение ложно, Java не проверяет второе выражение, потому что целое выражение является ложной.

  • Первый случай - наилучшая практика.
  • Второй случай неверен.

Ответ 5

Оператор && называется оператором короткого замыкания. Это означает, что когда результат известен. т.е. false && x всегда false, он не оценивает остальные выражения.

В этом случае используется короткое замыкание ||, операция OR, например:

if(text == null || text.isEmpty())

Ответ 6

Вы можете использовать try и catch, если хотите использовать второй, в противном случае первый и третий будут правильными.