JavaRush /Java Blog /Random-JA /null は Java のオブジェクトですか?

null は Java のオブジェクトですか?

Random-JA グループに公開済み
nullはオブジェクトですか? それは絶対にないと言えます。(null instanceof Object)価値を与えるという意味でfalse。null について他に知っておくべきことは次のとおりです。
null は Java のオブジェクトですか?  - 1
  1. 値が null でメソッドを呼び出すことはできません。値が nullでメソッドが非静的でx.m()ある場合は、エラーがスローされます。ちなみに、静的メソッドの場合は、クラスのみが重要で、値は無視されるため、すべて問題ありません。xmmx

  2. null はすべてに対して 1 つだけ存在し、クラスごとに個別の null は存在しません。したがって、((String) null == (Hashtable) null)たとえば。

  3. メソッドで許可されている場合、null をパラメータとしてメソッドに渡すことは完全に許容されます (null パラメータを許可するメソッドもあれば、許可しないメソッドもあります)。したがって、たとえば、 と書くこともできますSystem.out.println (null)が、それはbutstring.compareTo (null)機能しません。したがって、完全に明らかではない場合でも、メソッドの javadoc コメントで、パラメータとして null が受け入れられるかどうかを必ず示してください。

  4. バージョン 1.1 から 1.1.5 までの JDK では、リテラル引数として null を匿名内部クラスのコンストラクターnew SomeClass(null) { ...}渡すと (たとえば、コンパイラ エラーが発生しました。ただし、値が null の式を渡すことも、強制的な引数を渡すこともできます) null、形式でnew SomeClass((String) null) { ...}

  5. 少なくとも 3 つの異なるケースがあり、通常は null を使用して表現されます。

    • 未初期化(初期化されていない)。まだ値が割り当てられていない変数またはスロット。

    • 存在しない/該当しない. たとえば、バイナリ ツリーの終端ノードは、null の子を持つ通常のノードと呼ぶことができます。

    • (何かが空であること)。たとえば、null を使用して空のツリーを表すことができます。これは前のケースとはまったく異なることに注意してください (実際には混同されることがよくあります)。違いは、null が許容可能なツリー ノードであるか、または null が値をツリー ノードとして扱う必要がないことを意味するかどうかです。

    順次コンソール出力メソッドを使用したバイナリ ツリー ノードの 3 つの実装を比較します。


  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() { }
    }
答えの著者: Peter Norvig、人工知能分野のアメリカの科学者、Google の研究ディレクター
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION