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

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
}

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


 private String tempo = null;

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

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

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)

Qual que é a diferença disso…

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

pra isso…

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

?

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…

[quote=mrblack]Qual que é a diferença disso…

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

pra isso…

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

?[/quote]

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

[quote=Lavieri][quote=mrblack]Qual que é a diferença disso…

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

pra isso…

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

?[/quote]

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

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

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
}

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:

[code]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) {
	
	}
	
}

}[/code]

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.