En Java, el literal null se usa para indicar la ausencia de un valor.
Los tipos de datos primitivos en Java tienen todos un valor predeterminado y, por lo tanto, nunca pueden ser null.
Por convención, empiezan por minúscula, por ejemplo, int.
Los tipos de referencia contienen la dirección de memoria de un objeto y pueden tener un valor null.
Normalmente empiezan por mayúscula, por ejemplo, String.
Intentar asignar a una variable primitiva un valor null dará lugar a un error en tiempo de compilación, ya que la variable siempre contiene un valor predeterminado del tipo asignado.
// Throws compile time error stating the required type is int, but null was provided
int number = null;
Asignar un valor null a una variable de referencia no dará lugar a un error en tiempo de compilación, ya que las variables de referencia pueden ser nulas.
//No error will occur as the String variable str is nullable
String str = null;
Aunque acceder a una variable de referencia que tiene un valor null se compila sin problemas, dará lugar a que se lance una NullPointerException en tiempo de ejecución.
int[] arr = null;
// Throws NullPointerException at runtime
arr.length;
Se lanza una NullPointerException cuando se intenta acceder a una variable de referencia que es nula pero requiere un objeto.
Para trabajar de forma segura con valores que pueden ser nulos, conviene comprobar si son null antes de trabajar con ellos, lo cual puede hacerse con operadores de igualdad como == o !=:
int[] arr = null;
if(arr != null) {
System.out.println(arr.length);
} else {
//Perform an alternate action when arr is null
}