Duvida em comparação em um campo String como nulo?

10 respostas
P

Olá,

tenho um campo null e faço um if mas está entrando no if e não era…

o que pode ser ???

class Cliente{


@Column
private String tempo;



-----

--comparação

if (cli.getTempo()!=null ||!"".equals(cli.getTempo())||!cli.getTempo().equals("")){

  // ta fazendo
}

10 Respostas

jingle

sempre lembrando que no seu exemplo em nenhum momento se declarou o campo como null, tente definir…

private String tempo = null;
D

Uma uma vez que ele não inicializou a variável a string não deveria receber o valor de null?

seniocaires

if(cli.getTempo() == null || cli.getTempo().equals(""))
System.out.println("O Campo está vazio ");

Lavieri

if (cli.getTempo()!=null ||!"".equals(cli.getTempo())||!cli.getTempo().equals("")){

// ta fazendo
}
Este seu IF sempre será verdadeiro

se o cliente não for nulo, ou se o cliente não foir diferente de “” … ou seja… sempre será verdade

veja o exemplo

tempo = null;

logo será falso para… tempo != null … e verdadeiro para… !"".equals(tempo)

tempo = “”;

logo será verdadeiro para tempo != null …

tempo = “auhhauahuua”;

logo será verdadeiro para tempo != null …

acho que o que vc quer é um && ( um AND) e não um || (um OR)

M

Qual que é a diferença disso…

!"".equals(cli.getTempo())

pra isso…

!cli.getTempo().equals("")

?

E

se tempo é null, a segunda condição do seu if fica

!"".equals(cli.getTempo()) --> Palavra vazia não é igual a null, o que é verdade e entra no if

Além disso se tentasse avaliar o terceiro teste, vc teria um NullPointerException…

dá uma olhada no que você realmente quer fazer…

Lavieri

mrblack:
Qual que é a diferença disso…

!"".equals(cli.getTempo())

pra isso…

!cli.getTempo().equals("")

?

o segundo gera 1 exceção de ponteiro NullPointerException caso cli ou cli.getTempo() sejam nulos… apenas esta a diferença

M

Lavieri:
mrblack:
Qual que é a diferença disso…

!"".equals(cli.getTempo())

pra isso…

!cli.getTempo().equals("")

?

o segundo gera 1 exceção de ponteiro NullPointerException caso cli ou cli.getTempo() sejam nulos… apenas esta a diferença

sim, era aí que eu queria chegar, esses testes estão redundantes, é só tu pegar o primeiro teste e pronto.

Felagund

pq não usar o metodo isEmpty da classe String, muito mais intuitivo que usar o equals("")

String str = null;
if(str != null && !str.isEmpty()){
//faça algo
}
R

Lembrando que se atribuirmos ao objeto Cliente o valor null e chamarmos o método, o NullPointerException irá acontecer. Abaixo tem um exemplo que mostra melhor o que eu quero dizer:

public class Main {
	
	public static void main(String args[]) {
		
		Cliente cli = null;
		
		/*
		 * A conição abaixo gera NullPointerException pois o objeto
		 * cli é null.
		 */
		if (cli.getUser() == null) {
		
		}
		
	}
}

Outra coisa, em condições que queremos verificar se um objeto é nulo e depois fazer outra condição nesse mesmo If, devemos sempre verificar se o objeto é nulo primeiro. Senão também irá ocorrer NullPointerException. Olhem o exemplo abaixo:

public class Main {
	
	public static void main(String args[]) {
		
		Cliente cli = null;
		
		/*
		 * Aqui também irá ocorrer um NullPointerException, pois a primeira
		 * condição é executada primeiro.
		 */
		if ((cli.getUser().equals("Alguma Coisa")) && (cli != null)) {
			
		}
	}
}

Abaixo, se invertermos as condições, irá funcionar normalmente.

public class Main {
	
	public static void main(String args[]) {
		
		Cliente cli = null;
		
		/*
		 * Aqui não irá ocorrer NullPointerException e o fluxo irá entrar
		 * no "else" e imprimir a String.
		 */
		if ((cli != null) && (cli.getUser().equals("Alguma Coisa"))) {
			System.out.println("O objeto cli não é nulo");
		}
		else {
			System.out.println("O objeto cli é nulo");
		}
	}
}

Eu também usaria a sugestão Felagund para ver se uma String é vazia ou não.

Criado 31 de março de 2009
Ultima resposta 31 de mar. de 2009
Respostas 10
Participantes 9