Оператор &&
короткое замыкание, он не оценивает правую сторону, если это не обязательно. В этом случае необходимо:
if(Check==null && Check.isEmpty()){
System.out.println("get Inside")
}
Если Check
является null
(и это так), вы будете продолжать проверять состояние после &&
, и вы получите Check.isEmpty()
. Поскольку Check
- null
, это как null.isEmpty()
, который является нэпом.
Почему?
Если у двух выражений есть &&
между ними, если первый из них является ложным, ответ всегда будет ложным, а другая сторона не будет проверяться, но когда первый - true
, вам нужно продолжить и проверить другую чтобы узнать, должно ли все выражение быть оценено до true
или false
.
Но когда у вас есть:
if(Check!=null && Check.isEmpty()){
System.out.println("get Inside")
}
Тогда правая сторона не будет достигнута, так как это излишним, чтобы проверить его. Вы уже получили false
, и это не имеет значения, если вы получаете true
или false
на правой стороне, то результат будет false
, так как это AND
(FALSE & & WHATEVER = FALSE). Так зачем же проверять?
This link может вам помочь.
(я рекомендую вам следовать Java Naming Conventions и сделать переменные начинаться с нижнего регистра).
Помните об этом: ==! =! = –
@dirkk На самом деле '==' отлично (в том смысле, что он не генерирует исключение). Эта проверка не бросает NPE. Проблема в том, что другая сторона оценивается, тогда NPE бросается. – Maroun
@MarounMaroun Конечно, с «этим» я ссылался на все заявление. Я просто думаю, что это очень очевидно, поскольку вы сначала проверяете, что 'Check' имеет значение null, а затем, тем не менее, получает доступ к этому элементу. – dirkk