Untuk memahami maksud null dalam Java, mari kita lihat analogi dengan nombor: nombor 0 melambangkan ketiadaan sesuatu, dan null bermaksud perkara yang sama apabila merujuk kepada jenis data rujukan. Jika medan jenis rujukan (seperti String , Object , atau StringBuilder ) tidak diberikan nilai secara eksplisit, maka, dengan analogi dengan jenis primitif, ia menerima nilai lalai, dan nilai itu adalah null :

Kod Output konsol

public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
                    
0
null

Tetapi jika anda mengisytiharkan tatasusunan seperti ini:


String[] strings = new String[12];

tatasusunan akan dibuat mengandungi 12 elemen, dan kesemuanya akan menjadi null :

Kod Output konsol

public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println("Element " + i + ":" + strings[i]);
        }
    }
}
                    
Elemen 0: null
Elemen 1: null
Elemen 2: null
Elemen 3: null
Elemen 4: null
Elemen 5: null
Elemen 6: null
Elemen 7: null
Elemen 8: null
Elemen 9: null
Elemen 10: null
Elemen 11: null

Seperti yang anda lihat, apabila digabungkan dengan rentetan, nilai null menjadi rentetan " null ". Yang berkata, jika anda memanggil kaedah toString() padanya, seperti ini:


String[] strings = null;
System.out.println(strings.toString());

maka anda akan mendapat NullPointerException ( kami akan membincangkan pengecualian secara terperinci kemudian). Perkara yang sama berlaku jika anda cuba memanggil mana-mana kaedah lain pada null (pengecualian adalah kaedah statik, yang akan anda ketahui sebentar lagi):


public static void main(String[] args) {
    StringBuilder sb = null;
    sb.append("test"); // This will compile, but there will be a runtime error
}

null ialah, antara lain, kata kunci terpelihara (seperti public atau static ), jadi anda tidak boleh membuat pembolehubah, kaedah atau kelas bernama null . Seperti yang lain, kata kunci ini sensitif huruf besar-besaran (anda mungkin perasan bahawa kami menulis null dalam huruf kecil di mana-mana). Maksudnya:


String firstName = Null; // Compilation error

String secondName = NULL; // Compilation error

String fullName = null; // This will compile

Mari lihat apa lagi yang anda boleh dan tidak boleh lakukan dengan null :

  • Anda boleh menetapkan null kepada mana-mana rujukan:

    
    StringBuilder sb = null;
                
  • null boleh dihantar ke mana-mana jenis rujukan:

    
    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
                
  • null tidak boleh diberikan kepada pembolehubah primitif:

    
    int i = null; // This won't compile
                
  • null boleh dibandingkan menggunakan == dan !=

  • null == null kembali benar

Dalam pelajaran sebelumnya, kita bercakap tentang bagaimana segala-galanya dalam Java adalah objek, dan setiap objek mempunyai jenis.

Apa yang boleh kita katakan tentang null dalam hal ini? null ialah literal jenis tertentu, dan jenis ini tidak mempunyai nama. Dan kerana jenis ini tidak mempunyai nama, adalah mustahil untuk mengisytiharkan pembolehubah jenis ini, atau menghantar kepadanya. Oleh itu, null ialah satu-satunya wakil bagi jenis yang tidak dinamakan ini. Dalam amalan, kita boleh mengabaikan jenis ini, dan menganggap null sebagai literal khas yang boleh diberikan kepada mana-mana pembolehubah rujukan.

Perkara yang perlu diingat:

  • null ialah nilai lalai untuk jenis data rujukan
  • null bermaksud "tiada nilai"
  • Jika kita memanggil sebarang kaedah pada objek yang nilainya adalah null , kod itu akan dikompilkan tetapi pada masa jalan kita akan mendapat NullPointerException .