Java에서 null이 의미하는 바를 이해하기 위해 숫자와 비유를 살펴보겠습니다. 숫자 0은 무언가가 없음을 상징하고 null은 데이터 유형을 참조할 때 같은 것을 의미합니다. 참조 유형의 필드(예: String , Object 또는 StringBuilder )에 값이 명시적으로 할당되지 않은 경우 기본 유형과 유사하게 기본값을 받고 해당 값은 null 입니다 .

암호 콘솔 출력
public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
0
null

그러나 다음과 같이 배열을 선언하면

String[] strings = new String[12];

12개의 요소를 포함하는 배열이 생성되고 모두 null 이 됩니다 .

암호 콘솔 출력
public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println("Element " + i + ":" + strings[i]);
        }
    }
}
요소 0: null
요소 1: null
요소 2: null
요소 3: null
요소 4: null
요소 5: null
요소 6: null
요소 7: null
요소 8: null
요소 9: null
요소 10: null
요소 11: null

보시다시피 문자열과 연결되면 null 값은 문자열 " null "이 됩니다. 즉, 다음과 같이 toString() 메서드를 호출하면 다음과 같습니다.

String[] strings = null;
System.out.println(strings.toString());

그러면 NullPointerException 이 발생합니다 (예외에 대해서는 나중에 자세히 설명하겠습니다). null 에 대해 다른 메서드를 호출하려고 하면 같은 일이 발생합니다 (예외는 정적 메서드이며 곧 알게 될 것입니다).

public static void main(String[] args) {
    StringBuilder sb = null;
    sb.append("test"); // This will compile, but there will be a runtime error
}

null 은 무엇보다도 예약된 키워드(예: public 또는 static )이므로 null 이라는 이름의 변수, 메서드 또는 클래스를 만들 수 없습니다 . 다른 키워드와 마찬가지로 이 키워드는 대소문자를 구분합니다(모든 곳에서 소문자로 null을 작성한다는 사실을 눈치채셨을 것입니다 ). 그 의미는:

String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile

null 로 할 수 있는 것과 할 수 없는 것을 살펴보겠습니다 .

  • 모든 참조에 null을 할당할 수 있습니다 .

    StringBuilder sb = null;
  • null은 모든 참조 유형으로 캐스트될 수 있습니다.

    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
  • 기본 변수에 null을 할당할 수 없습니다.

    int i = null; // This won't compile
  • null은 ==!=를 사용하여 비교할 수 있습니다.

  • null == null은 true를 반환합니다 .

이전 수업에서 우리는 Java의 모든 것이 객체이고 모든 객체가 유형을 갖는 방법에 대해 이야기했습니다.

이와 관련하여 null 에 대해 무엇을 말할 수 있습니까 ? null 은 특정 유형의 리터럴이며 이 유형에는 이름이 없습니다. 그리고 이 유형에는 이름이 없기 때문에 이 유형의 변수를 선언하거나 캐스트할 수 없습니다. 따라서 null은 이 명명되지 않은 유형의 유일한 대표자입니다. 실제로는 이 유형을 무시하고 null을 모든 참조 변수에 할당할 수 있는 특수 리터럴로 생각할 수 있습니다 .

기억해야 할 사항:

  • null은 참조 데이터 유형의 기본값입니다.
  • null은 "값 없음"을 의미합니다.
  • 값이 null 인 개체에서 메서드를 호출하면 코드가 컴파일되지만 런타임에 NullPointerException 이 발생 합니다 .