Ответ 1
Оператор или коротко замыкается, когда первый операнд имеет значение true. Таким образом,
String foo = null;
if (true || foo.equals("")) {
// ...
}
не выбрасывает NullPointerException
.
Как @prajeesh справедливо указывает на комментарии, так как короткое замыкание используется в реальном коде, это предотвращать NullPointerException
всякий раз, когда вы имеете дело с API, который может возвращать null. Например, если есть метод readStringFromConsole
, который возвращает либо текущую доступную строку, либо null, если пользователь ничего не вводит, мы могли бы написать
String username = readStringFromConsole();
while (username == null || username.length() == 0) {
// No NullPointerException on the while clause because the length() call
// will only be made if username is not null
System.out.println("Please enter a non-blank name");
username = readStringFromConsole();
}
// Now do something useful with username, which is non-null and of nonzero length
В качестве примечания, API, который возвращает пользовательский ввод, должен возвращать пустую строку всякий раз, когда пользователь ничего не вводит и не должен возвращать значение null. Возвращение null - это способ сказать "нет ничего доступного", в то время как пустая строка - это способ сказать "пользователь ничего не вводил" и поэтому предпочтителен.