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 |
---|---|
|
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 |
---|---|
|
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 .
GO TO FULL VERSION