Alguém pode me dizer na pratica a diferença entre null e vazio em java? Tem o string.utils isEmpty. Como é feita esta distinção?
Uma imagem vale mais que mil palavras:
Basicamente, null
é a ausência de valor. Se uma variável/referência é null
, então ela não tem valor nenhum. E se uma variável qualquer obj
for nula, então qualquer tentativa de acessá-la (como chamar um método obj.metodo()
) dará erro - neste caso, o NullPointerException
.
Já a string vazia é uma string que não tem nenhum caractere. Ela não é nula, pois tem um valor. E esse valor é “nada” (nenhum caractere). No caso de string, como ela representa uma sequência de caracteres, então uma string vazia seria uma sequência vazia (que não contém nenhum caractere). É isso que o método isEmpty
verifica, se é vazio ou não.
Ou seja, se s
é uma variável do tipo String
e eu chamar s.isEmpty()
:
- se
s
fornull
, dará erro (NullPointerException
) - se
s
não fornull
, o métodoisEmpty
retornatrue
se ela for vazia (não tem nenhum caractere) oufalse
caso não seja
Assim:
// string contendo 3 caracteres
String s = "abc";
System.out.println(s.isEmpty()); // false, não é vazia
// string vazia (sem nenhum caractere)
s = "";
System.out.println(s.isEmpty()); // true, é vazia
// string nula
s = null;
System.out.println(s.isEmpty()); // erro, não pode chamar o método pois 's' é null
Mas nao tem o metodo String.Util.isEmpty que verifica o null e vazio e retorna true se for verdadeiro?
StringUtils
é de uma biblioteca (se não me engano, do Apache-Commons), e o comportamento do método isEmpty
ali foi definido por quem a criou.
No caso, acharam uma boa considerar que tanto null
quanto string vazia deve retornar true
. Mas aí já não tem a ver com a diferença entre null
e vazio que eu comentei, já que a biblioteca considera que são equivalentes.
ok entendi obrigado