För att förstå vad null betyder i Java, låt oss titta på en analogi med siffror: siffran 0 symboliserar frånvaron av något, och null betyder samma sak när det gäller referensdatatyper. Om ett fält av en referenstyp (som String , Object , eller StringBuilder ) inte explicit tilldelas ett värde, får det, analogt med primitiva typer, ett standardvärde, och det värdet är null :

Koda Konsolutgång

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

Men om du deklarerar en array så här:


String[] strings = new String[12];

en array kommer att skapas som innehåller 12 element, och alla kommer att vara null :

Koda Konsolutgång

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]);
        }
    }
}
                    
Element 0: null
Element 1: null
Element 2: null
Element 3: null
Element 4: null
Element 5: null
Element 6: null
Element 7: null
Element 8: null
Element 9: null
Element 10: null
Element 11: null

Som du kan se, när det sammanfogas med en sträng, blir värdet null strängen " null ". Som sagt, om du anropar metoden toString() på den, så här:


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

då får du ett NullPointerException (vi kommer att diskutera undantag i detalj senare). Samma sak händer om du försöker anropa någon annan metod på null (undantaget är statiska metoder, som du snart kommer att lära känna):


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

null är bland annat ett reserverat nyckelord (som public eller static ), så du kan inte skapa en variabel, metod eller klass med namnet null . Precis som de andra är detta nyckelord skiftlägeskänsligt (du kanske har märkt att vi skriver noll med gemener överallt). Det betyder:


String firstName = Null; // Compilation error

String secondName = NULL; // Compilation error

String fullName = null; // This will compile

Låt oss titta på vad mer du kan och inte kan göra med null :

  • Du kan tilldela noll till alla referenser:

    
    StringBuilder sb = null;
                
  • null kan castas till vilken referenstyp som helst:

    
    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
                
  • null kan inte tilldelas en primitiv variabel:

    
    int i = null; // This won't compile
                
  • null kan jämföras med == och !=

  • null == null returnerar sant

I tidigare lektioner har vi pratat om hur allt i Java är ett objekt, och varje objekt har en typ.

Vad kan vi säga om null i detta avseende? null är en bokstavlig typ av en viss typ, och denna typ har inget namn. Och eftersom den här typen inte har något namn, är det omöjligt att deklarera en variabel av denna typ, eller att kasta till den. Således är null den enda representanten för denna icke namngivna typ. I praktiken kan vi ignorera denna typ och tänka på null som en speciell bokstavlig som kan tilldelas vilken referensvariabel som helst.

Saker att komma ihåg:

  • null är standardvärdet för referensdatatyper
  • null betyder "inget värde"
  • Om vi ​​anropar någon metod på ett objekt vars värde är null kommer koden att kompilera men vid körning får vi ett NullPointerException .