JavaRush /Java Blog /Random-KO /null은 Java의 객체입니까?

null은 Java의 객체입니까?

Random-KO 그룹에 게시되었습니다
null은 객체인가요? 나는 절대 그렇지 않다고 말할 수 있다. (null instanceof Object)가치를 부여한다는 의미에서 false. null에 대해 알아야 할 추가 사항은 다음과 같습니다.
null은 Java의 객체입니까?  - 1
  1. null 값이 있는 메서드를 호출할 수 없습니다. 값이 null이고 메서드가 비정적 x.m()이면 오류가 발생합니다 . 그런데 정적 메소드라면 모든 것이 괜찮습니다. 클래스만 중요 하고 값은 무시되기 때문입니다.xmmx

  2. 모든 클래스에 대해 하나의 null만 있고 각 클래스마다 별도의 null이 없습니다. 예 를 들어 ((String) null == (Hashtable) null).

  3. 메서드가 허용하는 경우 메서드에 매개 변수로 null을 전달하는 것은 완벽하게 허용됩니다(일부 메서드는 null 매개 변수를 허용하고 다른 메서드는 허용하지 않음). 예를 들어 이라고 쓸 수도 System.out.println (null)있지만 butstring.compareTo (null)작동하지 않습니다. 따라서 null이 완전히 명확하지 않은 경우 매개변수로 null이 허용되는지 여부를 항상 메소드의 javadoc 주석에 표시하십시오.

  4. 버전 1.1~1.1.5의 JDK에서는 익명 내부 클래스의 생성자 리터럴 인수로 null을 전달하면 ( new SomeClass(null) { ...}예: 컴파일러 오류가 발생합니다. 그러나 null 값이 있는 표현식을 전달하거나 강제 인수를 전달할 수 있습니다.) null, 형식new SomeClass((String) null) { ...}

  5. 일반적으로 null을 사용하여 표현되는 세 가지 다른 경우가 있습니다.

    • 초기화되지 않았습니다 (초기화 없음). 아직 값이 할당되지 않은 변수 또는 슬롯입니다.

    • 존재하지 않음/적용할 수 없음 예를 들어 이진 트리의 터미널 노드는 null 자식이 있는 일반 노드라고 할 수 있습니다.

    • 비어 있음 (무언가의 비어 있음). 예를 들어 null을 사용하여 빈 트리를 나타낼 수 있습니다. 이는 이전 사례와 상당히 다르다는 점에 유의하세요(실제로 혼동되는 경우가 많습니다). 차이점은 null이 허용 가능한 트리 노드인지 여부 또는 null이 값을 트리 노드로 처리할 필요가 없음을 의미하는지 여부입니다.

    순차 콘솔 출력 방법을 사용하여 이진 트리 노드의 세 가지 구현을 비교합니다.


  6. // null означает «не применимо»
    // Здесь нет пустого дерева.
    class Node {
      Object data;
      Node left, right;
    
      void print() {
        if (left != null)
          left.print();
        System.out.println(data);
        if (right != null)
          right.print();
      }
    }

  7. // 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);
      }
    }

  8. // Отдельный класс для 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() { }
    }
답변 작성자: 인공 지능 분야의 미국 과학자이자 Google 연구 책임자인 Peter Norvig
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION