JavaRush /Blog Java /Random-MS /Adakah null objek di Jawa?

Adakah null objek di Jawa?

Diterbitkan dalam kumpulan
Adakah null objek? Saya benar-benar boleh mengatakan bahawa ia tidak. Dalam erti kata (null instanceof Object)ia akan memberi nilai false. Inilah perkara lain yang perlu anda ketahui tentang null:
Adakah null objek di Jawa?  - 1
  1. Anda tidak boleh memanggil kaedah dengan nilai nol: x.m()ia akan membuang ralat apabila xnilainya batal dan mkaedah itu bukan statik. Dengan cara ini, jika mia adalah kaedah statik, semuanya baik-baik saja, kerana hanya kelas yang penting x, dan nilainya diabaikan.

  2. Hanya ada satu null untuk semua, dan bukan satu yang berasingan untuk setiap kelas. Oleh itu, ((String) null == (Hashtable) null)sebagai contoh.

  3. Ia boleh diterima dengan sempurna untuk menghantar null sebagai parameter kepada kaedah jika kaedah membenarkannya (sesetengah kaedah membenarkan parameter null, yang lain tidak). Jadi, sebagai contoh, anda mungkin menulis System.out.println (null), tetapi ia butstring.compareTo (null)tidak akan berfungsi. Oleh itu, sentiasa nyatakan dalam komen javadoc kaedah anda sama ada null boleh diterima sebagai parameternya, jika ia tidak jelas sepenuhnya.

  4. Dalam JDK dari versi 1.1 hingga 1.1.5, menghantar null sebagai hujah literal kepada pembina kelas dalaman tanpa nama (contohnya, new SomeClass(null) { ...}menyebabkan ralat pengkompil. Walau bagaimanapun, anda boleh menghantar ungkapan dengan nilai null, atau lulus paksaan null, dalam bentuknew SomeClass((String) null) { ...}

  5. Terdapat sekurang-kurangnya tiga kes berbeza, yang biasanya dinyatakan menggunakan null:

    • Tidak dimulakan (tiada permulaan). Pembolehubah atau slot yang belum diberikan sebarang nilai.

    • Tidak wujud/tidak berkenaan . Contohnya, nod terminal pokok binari boleh dipanggil nod biasa dengan anak nol.

    • Kosong (kekosongan sesuatu). Sebagai contoh, anda boleh menggunakan null untuk mewakili pokok kosong. Ambil perhatian bahawa ini agak berbeza daripada kes sebelumnya (mereka sering keliru dalam amalan). Perbezaannya ialah sama ada null ialah nod pokok yang boleh diterima atau sama ada null bermakna nilai itu tidak perlu dianggap sebagai nod pokok.

    Bandingkan tiga pelaksanaan nod pokok binari dengan kaedah keluaran konsol berjujukan:


  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() { }
    }
Pengarang jawapan: Peter Norvig, saintis Amerika dalam bidang kecerdasan buatan, pengarah penyelidikan di Google
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION