Java에서 null이 의미하는 바를 이해하기 위해 숫자와 비유를 살펴보겠습니다. 숫자 0은 무언가가 없음을 상징하고 null은 데이터 유형을 참조할 때 같은 것을 의미합니다. 참조 유형의 필드(예: String , Object 또는 StringBuilder )에 값이 명시적으로 할당되지 않은 경우 기본 유형과 유사하게 기본값을 받고 해당 값은 null 입니다 .
암호 | 콘솔 출력 |
---|---|
|
0
null |
그러나 다음과 같이 배열을 선언하면
String[] strings = new String[12];
12개의 요소를 포함하는 배열이 생성되고 모두 null 이 됩니다 .
암호 | 콘솔 출력 |
---|---|
|
요소 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 이 발생 합니다 .