Para entender o que significa nulo em Java, vejamos uma analogia com números: o número 0 simboliza a ausência de algo e nulo significa a mesma coisa quando se trata de tipos de dados de referência. Se um campo de um tipo de referência (como String , Object ou StringBuilder ) não tiver um valor atribuído explicitamente, então, por analogia com tipos primitivos, ele receberá um valor padrão e esse valor é null :

Código Saída do console

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
nulo

Mas se você declarar um array como este:


String[] strings = new String[12];

será criado um array contendo 12 elementos, e todos eles serão nulos :

Código Saída do console

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

Como você pode ver, quando concatenado com uma string, o valor null se torna a string " null ". Dito isso, se você chamar o método toString() nele, assim:


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

então você obterá um NullPointerException (discutiremos as exceções em detalhes mais tarde). A mesma coisa acontece se você tentar chamar qualquer outro método em null (a exceção são os métodos estáticos, que você conhecerá em breve):


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

null é, entre outras coisas, uma palavra-chave reservada (como public ou static ), então você não pode criar uma variável, método ou classe chamada null . Como as outras, esta palavra-chave diferencia maiúsculas de minúsculas (você deve ter notado que escrevemos null em minúsculas em todos os lugares). Que significa:


String firstName = Null; // Compilation error

String secondName = NULL; // Compilation error

String fullName = null; // This will compile

Vejamos o que mais você pode e não pode fazer com null :

  • Você pode atribuir nulo a qualquer referência:

    
    StringBuilder sb = null;
                
  • null pode ser convertido para qualquer tipo de referência:

    
    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
                
  • null não pode ser atribuído a uma variável primitiva:

    
    int i = null; // This won't compile
                
  • null pode ser comparado usando == e !=

  • nulo == nulo retorna verdadeiro

Nas lições anteriores, falamos sobre como tudo em Java é um objeto e todo objeto tem um tipo.

O que podemos dizer sobre null a esse respeito? null é um literal de um determinado tipo e esse tipo não tem nome. E como esse tipo não tem nome, é impossível declarar uma variável desse tipo ou fazer um cast para ela. Portanto, null é o único representante desse tipo sem nome. Na prática, podemos ignorar esse tipo e pensar em null como um literal especial que pode ser atribuído a qualquer variável de referência.

Coisas para lembrar:

  • null é o valor padrão para tipos de dados de referência
  • nulo significa "sem valor"
  • Se chamarmos qualquer método em um objeto cujo valor é null , o código será compilado, mas em tempo de execução obteremos um NullPointerException .