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