Hogy megértsük, mit jelent a null a Java nyelvben, nézzünk meg egy analógiát a számokkal: a 0 szám valaminek a hiányát szimbolizálja, a null pedig ugyanazt jelenti, ha referencia adattípusokról van szó. Ha egy referencia típusú mezőhöz (például String , Object vagy StringBuilder ) nincs explicit hozzárendelve érték, akkor a primitív típusokhoz hasonlóan alapértelmezett értéket kap, és ez az érték null :

Kód Konzol kimenet
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

De ha így deklarálsz egy tömböt:

String[] strings = new String[12];

létrejön egy tömb, amely 12 elemet tartalmaz, és mindegyik nulla lesz :

Kód Konzol kimenet
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]);
        }
    }
}
0. elem: null
1. elem: null
2. elem: null
3. elem: null 4.
elem: null
5. elem: null 6.
elem: null
7.
elem: null 8. elem: null
9.
elem: null 10. elem: null
11. elem: null

Amint láthatja, ha egy karakterlánccal összefűzzük, a null értékből a " null " karakterlánc lesz . Ennek ellenére, ha meghívja rajta a toString() metódust, így:

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

akkor kap egy NullPointerException-t (a kivételeket később részletesen tárgyaljuk). Ugyanez történik, ha bármilyen más metódust nullán próbál meg hívni ( a kivétel a statikus metódusok, amelyeket hamarosan megismerhet):

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

A null többek között egy fenntartott kulcsszó (például public vagy static ), így nem hozhat létre null nevű változót, metódust vagy osztályt . A többihez hasonlóan ez a kulcsszó is megkülönbözteti a kis- és nagybetűket (talán észrevetted, hogy mindenhol nullát írunk kisbetűvel). Azt jelenti:

String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile

Nézzük meg, mit tehetsz még és mit nem a nullszal :

  • Bármely hivatkozáshoz null értéket rendelhet :

    StringBuilder sb = null;
  • null bármely referenciatípusra átadható:

    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
  • null nem rendelhető primitív változóhoz:

    int i = null; // This won't compile
  • null összehasonlítható az == és != használatával

  • null == A null true értéket ad vissza

Az előző leckékben arról beszéltünk, hogy a Java-ban minden objektum, és minden objektumnak van típusa.

Mit mondhatunk a nulláról ebből a szempontból? A null egy bizonyos típusú literál, és ennek a típusnak nincs neve. És mivel ennek a típusnak nincs neve, lehetetlen ilyen típusú változót deklarálni, vagy átküldeni rá. Így a null az egyetlen képviselője ennek a névtelen típusnak. A gyakorlatban figyelmen kívül hagyhatjuk ezt a típust, és a nullra úgy gondolhatunk , mint egy speciális literálra, amely bármely referenciaváltozóhoz hozzárendelhető.

Dolgok, amikre emlékezni kell:

  • null a referencia adattípusok alapértelmezett értéke
  • a null jelentése "nincs érték"
  • Ha olyan objektumon hívunk meg egy metódust, amelynek értéke null , a kód le lesz fordítva, de futás közben egy NullPointerException-t kapunk .