Будет ли это создавать NullPointerException, если нет, то почему? - PullRequest
1 голос
/ 14 июня 2011

У меня есть следующие строки кода

String name = null;
if (something)
    name = someString;
if (name != null && name.equals("XYZ"))
    doSomethingWith ("hello");

Приведет ли вышеприведенное условие, если условие приведет к NullPointerException, если "что-то" ложно?если нет, то почему?

Ответы [ 3 ]

9 голосов
/ 14 июня 2011

Нет, не будет. Оператор && в Java - это короткое замыкание , поэтому, если name равно null, то name.equals() не будет выполнено (поскольку false && anything по-прежнему false).

То же самое с ||, кстати: если левая сторона оценивается как true, правая сторона не проверяется.

2 голосов
/ 14 июня 2011

Нет, не будет.Правая часть оператора && выполняется только в том случае, если левая часть оператора && имеет значение true.

Аналогично в случае ||оператор , если для левой стороны задано значение true, правая сторона не будет выполнена.

0 голосов
/ 14 июня 2011

Нет, это не вызовет исключение NullPointerException из-за того, как написан оператор if.У вас есть:

if ( name != null && name.equals("XYZ")) {
    //do stuff...
}

Условия в выражении if оцениваются слева направо.Таким образом, если name равно нулю, то условие name != null оценивается как false, а поскольку false && <anything> оценивается как false, условие name.equals("XYZ") никогда даже не оценивается.

Это поведение - оптимизация во время выполнения , которое позволяет избежать выполнения кода, который не может повлиять на результат оператора if, и также предотвращает генерацию кода вашего примера из-за генерирования исключения NullPointerException..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...