Pentru a înțelege ce înseamnă null în Java, să ne uităm la o analogie cu numerele: numărul 0 simbolizează absența a ceva, iar null înseamnă același lucru când vine vorba de tipuri de date de referință. Dacă unui câmp de tip referință (cum ar fi String , Object sau StringBuilder ) nu i se atribuie în mod explicit o valoare, atunci, prin analogie cu tipurile primitive, primește o valoare implicită și acea valoare este nulă :

Cod Ieșire de consolă

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
nul

Dar dacă declarați o matrice ca aceasta:


String[] strings = new String[12];

va fi creată o matrice care conține 12 elemente și toate vor fi nule :

Cod Ieșire de consolă

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: nul
Element 1: nul
Element 2: nul
Element 3: nul
Element 4: nul
Element 5: nul
Element 6: nul
Element 7: nul
Element 8: nul
Element 9: nul
Element 10: nul
Element 11: nul

După cum puteți vedea, atunci când este concatenată cu un șir, valoarea null devine șirul „ null ”. Acestea fiind spuse, dacă apelați metoda toString() pe ea, astfel:


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

atunci veți obține o NullPointerException (vom discuta excepțiile în detaliu mai târziu). Același lucru se întâmplă dacă încercați să apelați orice altă metodă pe null (excepția sunt metodele statice, pe care le veți cunoaște în scurt timp):


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

null este, printre altele, un cuvânt cheie rezervat (cum ar fi public sau static ), așa că nu puteți crea o variabilă, o metodă sau o clasă numită null . La fel ca și celelalte, acest cuvânt cheie este sensibil la majuscule (s-ar putea să fi observat că scriem null cu litere mici peste tot). Asta inseamna:


String firstName = Null; // Compilation error

String secondName = NULL; // Compilation error

String fullName = null; // This will compile

Să ne uităm la ce altceva poți și ce nu poți face cu null :

  • Puteți atribui null oricărei referințe:

    
    StringBuilder sb = null;
                
  • null poate fi turnat la orice tip de referință:

    
    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
                
  • null nu poate fi atribuit unei variabile primitive:

    
    int i = null; // This won't compile
                
  • null poate fi comparat folosind == și !=

  • null == null returnează adevărat

În lecțiile anterioare, am vorbit despre cum totul în Java este un obiect și fiecare obiect are un tip.

Ce putem spune despre nul în acest sens? null este un literal de un anumit tip, iar acest tip nu are nume. Și din moment ce acest tip nu are nume, este imposibil să declarați o variabilă de acest tip, sau să o turnați. Astfel, null este singurul reprezentant al acestui tip nenumit. În practică, putem ignora acest tip și ne gândim la null ca un literal special care poate fi atribuit oricărei variabile de referință.

Lucruri de amintit:

  • null este valoarea implicită pentru tipurile de date de referință
  • null înseamnă „fără valoare”
  • Dacă apelăm orice metodă pe un obiect a cărui valoare este null , codul se va compila, dar la runtime vom obține o NullPointerException .