null은 객체인가요? 나는 절대 그렇지 않다고 말할 수 있다.
(null instanceof Object)
가치를 부여한다는 의미에서 false
. null에 대해 알아야 할 추가 사항은 다음과 같습니다.
- null 값이 있는 메서드를 호출할 수 없습니다. 값이 null이고 메서드가 비정적
x.m()
이면 오류가 발생합니다 . 그런데 정적 메소드라면 모든 것이 괜찮습니다. 클래스만 중요 하고 값은 무시되기 때문입니다.x
m
m
x
- 모든 클래스에 대해 하나의 null만 있고 각 클래스마다 별도의 null이 없습니다. 예 를 들어
((String) null == (Hashtable) null)
. - 메서드가 허용하는 경우 메서드에 매개 변수로 null을 전달하는 것은 완벽하게 허용됩니다(일부 메서드는 null 매개 변수를 허용하고 다른 메서드는 허용하지 않음). 예를 들어 이라고 쓸 수도
System.out.println (null)
있지만butstring.compareTo (null)
작동하지 않습니다. 따라서 null이 완전히 명확하지 않은 경우 매개변수로 null이 허용되는지 여부를 항상 메소드의 javadoc 주석에 표시하십시오. - 버전 1.1~1.1.5의 JDK에서는 익명 내부 클래스의 생성자 에 리터럴 인수로 null을 전달하면 (
new SomeClass(null) { ...}
예: 컴파일러 오류가 발생합니다. 그러나 null 값이 있는 표현식을 전달하거나 강제 인수를 전달할 수 있습니다.) null, 형식new SomeClass((String) null) { ...}
- 일반적으로 null을 사용하여 표현되는 세 가지 다른 경우가 있습니다.
- 초기화되지 않았습니다 (초기화 없음). 아직 값이 할당되지 않은 변수 또는 슬롯입니다.
- 존재하지 않음/적용할 수 없음 예를 들어 이진 트리의 터미널 노드는 null 자식이 있는 일반 노드라고 할 수 있습니다.
- 비어 있음 (무언가의 비어 있음). 예를 들어 null을 사용하여 빈 트리를 나타낼 수 있습니다. 이는 이전 사례와 상당히 다르다는 점에 유의하세요(실제로 혼동되는 경우가 많습니다). 차이점은 null이 허용 가능한 트리 노드인지 여부 또는 null이 값을 트리 노드로 처리할 필요가 없음을 의미하는지 여부입니다.
-
// null означает «не применимо» // Здесь нет пустого дерева. class Node { Object data; Node left, right; void print() { if (left != null) left.print(); System.out.println(data); if (right != null) right.print(); } }
-
// null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) { if (node != null) node.print(); } void print() { print(left); System.out.println(data); print(right); } }
-
// Отдельный класс для Empty // null не используется interface Node { void print(); } class DataNode implements Node{ Object data; Node left, right; void print() { left.print(); System.out.println(data); right.print(); } } class EmptyNode implements Node { void print() { } }
순차 콘솔 출력 방법을 사용하여 이진 트리 노드의 세 가지 구현을 비교합니다.
GO TO FULL VERSION