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;
NullPointerException은 참조 변수가 null인데 객체가 필요할 때 그 변수에 접근하려고 하면 발생해요.
null일 수 있는 값을 안전하게 다루려면, 사용하기 전에 null인지 확인해야 해요. 이때 ==나 != 같은 동등 연산자를 사용할 수 있어요.
int[] arr = null;
if(arr != null) {
System.out.println(arr.length);
} else {
//Perform an alternate action when arr is null
}