or 演算子は、最初のオペランドが true の場合に短絡されます。そう、
String foo = null;
if (true || foo.equals("")) {
// ...
}
をスローしませんNullPointerException
。
@prajeesh がコメントで正しく指摘しているように、実際のコードでショートサーキットを使用する方法は、NullPointerException
null を返す可能性のある API を扱うときはいつでも回避することです。したがって、たとえば、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 を返すことは「利用できるものがない」ことを示す方法ですが、空の文字列を返すことは「ユーザーが何も入力していない」ことを示す方法であるため、推奨されます。