For å forstå hva null betyr i Java, la oss se på en analogi med tall: tallet 0 symboliserer fraværet av noe, og null betyr det samme når det gjelder referansedatatyper. Hvis et felt av en referansetype (som String , Object eller StringBuilder ) ikke er eksplisitt tildelt en verdi, mottar det, analogt med primitive typer, en standardverdi, og denne verdien er null :

Kode Konsollutgang
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 hvis du erklærer en matrise som dette:

String[] strings = new String[12];

en matrise vil bli opprettet som inneholder 12 elementer, og alle vil være null :

Kode Konsollutgang
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 den er sammenkoblet med en streng, blir verdien null til strengen " null ". Når det er sagt, hvis du kaller toString()- metoden på den, slik:

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

da vil du få en NullPointerException (vi vil diskutere unntak i detalj senere). Det samme skjer hvis du prøver å kalle en annen metode på null (unntaket er statiske metoder, som du snart vil bli kjent med):

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

null er blant annet et reservert nøkkelord (som public eller static ), så du kan ikke lage en variabel, metode eller klasse kalt null . Som de andre, skiller dette søkeordet mellom store og små bokstaver (du har kanskje lagt merke til at vi skriver null med små bokstaver overalt). Det betyr:

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

La oss se på hva annet du kan og ikke kan gjøre med null :

  • Du kan tilordne null til enhver referanse:

    StringBuilder sb = null;
  • null kan castes til hvilken som helst referansetype:

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

    int i = null; // This won't compile
  • null kan sammenlignes med == og !=

  • null == null returnerer sant

I tidligere leksjoner snakket vi om hvordan alt i Java er et objekt, og hvert objekt har en type.

Hva kan vi si om null i denne forbindelse? null er en bokstav av en bestemt type, og denne typen har ikke noe navn. Og siden denne typen ikke har noe navn, er det umulig å deklarere en variabel av denne typen, eller å kaste til den. Dermed er null den eneste representanten for denne ikke navngitte typen. I praksis kan vi ignorere denne typen, og tenke på null som en spesiell bokstavelig som kan tilordnes en hvilken som helst referansevariabel.

Ting å huske:

  • null er standardverdien for referansedatatyper
  • null betyr "ingen verdi"
  • Hvis vi kaller en metode på et objekt hvis verdi er null , vil koden kompilere, men ved kjøring får vi en NullPointerException .