Javaでは、nullリテラルを使って、値が存在しないことを表します。
Javaのプリミティブ型はすべてデフォルト値を持っているため、nullになることはありません。慣習として、intのように小文字で始まります。
参照型はオブジェクトのメモリアドレスを持ち、nullを値として持つことができます。こちらは一般的にStringのように大文字で始まります。
プリミティブ型の変数にnullを代入しようとすると、コンパイルエラーになります。その変数は常に、代入された型のデフォルト値を持っているからです。
// Throws compile time error stating the required type is int, but null was provided
int number = null;
参照型の変数にnullを代入しても、参照型の変数はnullを許容するため、コンパイルエラーにはなりません。
//No error will occur as the String variable str is nullable
String str = null;
値がnullである参照型の変数にアクセスするコードは、コンパイルは通りますが、実行時にNullPointerExceptionがスローされます。
int[] arr = null;
// Throws NullPointerException at runtime
arr.length;
nullであるのにオブジェクトが必要な参照型の変数にアクセスしようとすると、NullPointerExceptionがスローされます。
nullの可能性がある値を安全に扱うには、その値を使う前にnullかどうかを確認します。確認には、==や!=などの等値演算子を使います。
int[] arr = null;
if(arr != null) {
System.out.println(arr.length);
} else {
//Perform an alternate action when arr is null
}