Comparar String com valor null

16 respostas
C

Olá boa tarde. Tenho o código:
public void adiciona (Objeto objeto){

if (objeto.valor().equals("on"){ system.out.prinltn("ok"); } }
Este “on” vem de um checkbox e funciona perfeitamente qdo o checkbox está marcado. Porém qdo o checkbox não está marcado dá erro de NullPointException porque neste caso a variável está realmente com null. Como então eu resolvo este problema, ou seja, comparar uma String que pode ter valor null?
Grato, Carlos.

16 Respostas

thokk
if(objeto.valor() == null) ou if(objeto.valor() != null)

valor() -> retorna uma String .
criador

Você também pode fazer da seguinte forma:

if (checkbox.isSelected()) {
	System.out.println("Ok");
}

Abraço!

thiago.correa
thokk:
if(objeto.valor() == null) ou if(objeto.valor() != null)

valor() -> retorna uma String .

Em ambos os casos se o objeto for nulo rola uma NPE neste caso, o melhor seria

if (objeto != null && !"".equals(objeto.valor()) {
}

Tem a classe StringUtils do commons-lang que possui vários métodos utilitários vale a pena dar uma lida na API

thiago_spdvr

ja pensou em usar o metodo .isEmpty pra verificar se a string está vazia ? ou não seria isso ?

thokk

Creio que ele só verifica se a String esta vazia, mas não como null. Caso queira ver se ela é vazio o padrão é realmente usar o isEmpty(), é melhor que usar utilizando “”, mas usar “” tbm não esta arrado.

lina

Creio que ele só verifica se a String esta vazia, mas não como null. Caso queira ver se ela é vazio o padrão é realmente usar o isEmpty(), é melhor que usar utilizando “”, mas usar “” tbm não esta arrado.

Oi,

Não está errado, porém utilizar equals para comparar se uma String esta vazia, é um processo muito demorado.
O processo equals faz 3 verificações:

1- Compares this string to the specified object.  The result is {<a class="mention" href="/u/code">@code</a> true}

2- if and only if the argument is not {<a class="mention" href="/u/code">@code</a> null}

3- is a {<a class="mention" href="/u/code">@code</a>* String} object that represents the same sequence of characters as this object.

Já o isEmpty já sabe que irá comparar uma String e faz o processo diretamente.

Tchauzin!

eltonads

Você pode usar algo assim:

if ("on".equals(objeto.valor())) {
    system.out.prinltn("ok");   
}

Desse modo, se objeto.valor() for null ou diferente de “on” vai retornar falso no if de qualquer jeito.

Att.,

lina

eltonads:
Você pode usar algo assim:

if ("on".equals(objeto.valor())) {
    system.out.prinltn("ok");   
}

Desse modo, se objeto.valor() for null ou diferente de “on” vai retornar falso no if de qualquer jeito.

Att.,

Oi,

E… se a variavel objeto for null ?

Tchauzin!

eltonads

Foi mal… achei que o problema era só quando objeto.valor() retornasse null…
Nesse caso só um if a mais mesmo e deu… nao tem muito jeito né?!

if (objeto != null && "on".equals(objeto.valor())) {   
    system.out.prinltn("ok");     
}

Att.,

romarcio

Creio que ele só verifica se a String esta vazia, mas não como null. Caso queira ver se ela é vazio o padrão é realmente usar o isEmpty(), é melhor que usar utilizando “”, mas usar “” tbm não esta arrado.

Oi,

Não está errado, porém utilizar equals para comparar se uma String esta vazia, é um processo muito demorado.
O processo equals faz 3 verificações:

1- Compares this string to the specified object.  The result is {<a class="mention" href="/u/code">@code</a> true}

2- if and only if the argument is not {<a class="mention" href="/u/code">@code</a> null}

3- is a {<a class="mention" href="/u/code">@code</a>* String} object that represents the same sequence of characters as this object.

Já o isEmpty já sabe que irá comparar uma String e faz o processo diretamente.

Tchauzin!

Interessante isso que a Lina postou, eu particularmente não sabia como o equals executava essa comparação. Mas geralmente se vamos testar se um objeto é null, se usa o isEmpty, isso aprendia ainda no PHP, hehe.
Mas parece que já resolveu seu problema sem isso, mas vale o teste.

G

lina:

Oi,

Não está errado, porém utilizar equals para comparar se uma String esta vazia, é um processo muito demorado.
O processo equals faz 3 verificações:

1- Compares this string to the specified object.  The result is {<a class="mention" href="/u/code">@code</a> true}

2- if and only if the argument is not {<a class="mention" href="/u/code">@code</a> null}

3- is a {<a class="mention" href="/u/code">@code</a>* String} object that represents the same sequence of characters as this object.

Já o isEmpty já sabe que irá comparar uma String e faz o processo diretamente.

Tchauzin!

Lina, você não tem noção o quanto eu brigo quando vejo programador fazendo comparação com equals(""). Além de feio você faz essas verificações denecessárias enquanto o length() == 0 faz o mesmo trabalho. Aliás a implementação String.isEmpty() (pós Java 6) usa length == 0.

Abraços

Vini_Fernandes

Ola cmendes, acredito que esse NullPointer nao seja pelo fato que seu checkbox nao tenha sido checado, mas sim porque objeto.valor() esteja nulo. Por exemplo, nao tem problema algum fazer a seguinte comparacao

"minhaString".equals(null);

pois teremos como retorno “false”, já que toda implementacao de equals deve retornar “false” quando o parametro esteja nulo. Sendo assim, recomendo voce fazer o seguinte:

if (objeto.valor() != null && objeto.valor().equals("on"){  
   system.out.prinltn("ok");  
}

Agora seu cogido esta protegido contra qualquer NullPointerException…rsrs
Ate mais

G

Vini Fernandes:

if (objeto.valor() != null && objeto.valor().equals("on"){  
   system.out.prinltn("ok");  
}

Agora seu cogido esta protegido contra qualquer NullPointerException…rsrs
Ate mais

Não, se objeto for null, dá null-pointer. O correto seria:

if (objeto != null && objeto.valor() != null && objeto.valor().equals("on"){ system.out.prinltn("ok"); }

M

Um NullPointerException ocorre quando chamamos um método a partir de uma referência a ‘null’. Por exemplo:

String s = null;
System.out.println(s.length());

No caso, verificamos se a variável objeto é diferente de ‘null’ e se for, podemos chamar o método:

"on".equals(objeto.valor());

Podemos fazer isso tranquilamente, pois chamamos o método ‘equals’ da String “on”, que nunca será ‘null’. E como sabemos que ‘objeto’ é diferente de ‘null’, podemos chamar seu método sem problemas.

Mesmo que o método ‘objeto.valor()’ retorne ‘null’, nesse caso, não haverá NullPointerException.

Logo, o código está correto:

if (objeto != null && "on".equals(objeto.valor()) {
    // código!
}
Vini_Fernandes

Correto marcobiscaro2112, porem esse “ok” é dinamico no caso do proprietario do post!

M

Como assim? O “ok” é apenas mostrado na saída do console se a comparação for verdadeira. E pelo que me parece, tanto o “ok” quanto o “on” são sempre fixos.

Criado 1 de outubro de 2009
Ultima resposta 1 de out. de 2009
Respostas 16
Participantes 11