Nao sei o que acontece,tem hora que meu eclipse não é logico.... ele fala q 2 == 2 é false

9 respostas
M
if (tipoRevista.getRevitasList().get(i).getTp() == ConstantesTipoRevista.ESPORTE) {

debugei que na debugação o primeiro bloco é 2 e o segundo é 2 também… mas não encontra nesse if

observacao:
ja desliguei e liguei de novo a maquina

ja dei clean no eclipse

9 Respostas

Rodrigo_Sasaki

Já tentou com equals?

lucasportela

se for do tipo String é falso mesmo

jeanmalvessi

Essa de reiniciar a máquina pra mim é nova. Bom seria se reiniciar o pc ou falar mal do eclipse arrumasse um código errado.

Se está comparando objetos, utilize o Equals. Simples assim.

[]'s

RafaelCassau

Caro mariazinhahappy, seguinte, o java usa referencia para guardar o endereço do seu objeto na HEAP sendo assim, quando se compara objetos, entenda por objetos qualquer classe que foi construida com a palavra reservada “new” ou qualquer classe Wrapper em java sendo algumas delas (Integer, Double, Float, Long) caso você queira comparar objetos, será necessário sobreescrever os métodos equals() e hashCode(), o eclipse faz isso para você agora caso você esteja tentando comparar Integer o java apartir a versão 5 faz o inbox para você (inbox) entenda como o mecanismo de encaixotamento e desencaixotamento que na verdade nada mais é do que o conversão de tipos primitivos para objetos que emulam o mesmo comportamento ae você poderá usar o ‘==’ pois o mesmo ira comparar o conteudo das variaveis e nesse conteudo terá realmente o valor que ela representa, bem diferente de quando temos objetos, em que as variaveis que o representam guardam seu endereço, ou seja, por mais que os objetos sejam iguais o seu endereço sempre será diferente.

espero ter ajudado

quanto ao amigo que disse que somente usando o equals funciona, na verdade não funciona o equals() só funciona com String pois a classe sobrescreve o equals() e o hascode() de Object

t+

Rodrigo_Sasaki
RafaelCassau:
agora caso você esteja tentando comparar Integer o java apartir a versão 5 faz o inbox para você (inbox) entenda como o mecanismo de encaixotamento e desencaixotamento que na verdade nada mais é do que o conversão de tipos primitivos para objetos que emulam o mesmo comportamento ae você poderá usar o '==' pois o mesmo ira comparar o conteudo das variaveis e nesse conteudo terá realmente o valor que ela representa
Opa. Calma lá :) Isso nem sempre é verdade. Veja o exemplo abaixo:
public static void main(String[] args){
		Integer num1 = 10;
		Integer num2 = 10;
		
		System.out.println(num1 == num2); // true
		
		num1 = 128;
		num2 = 128;
		
		System.out.println(num1 == num2); // false
	}
A

mariazinhahappy:
if (tipoRevista.getRevitasList().get(i).getTp() == ConstantesTipoRevista.ESPORTE) {

debugei que na debugação o primeiro bloco é 2 e o segundo é 2 também… mas não encontra nesse if

observacao:
ja desliguei e liguei de novo a maquina

ja dei clean no eclipse

Com certeza vc está tentando comparar números, contudo está na verdade partindo a mesma de objetos.

Use este método, deve funcionar:
.intValue()

Seu código de ficar assim:

if (tipoRevista.getRevitasList().get(i).getTp().intValue() == ConstantesTipoRevista.ESPORTE) {

M

meninos funcionou muito obrigada

lina
Rodrigo Sasaki:
RafaelCassau:
agora caso você esteja tentando comparar Integer o java apartir a versão 5 faz o inbox para você (inbox) entenda como o mecanismo de encaixotamento e desencaixotamento que na verdade nada mais é do que o conversão de tipos primitivos para objetos que emulam o mesmo comportamento ae você poderá usar o '==' pois o mesmo ira comparar o conteudo das variaveis e nesse conteudo terá realmente o valor que ela representa
Opa. Calma lá :) Isso nem sempre é verdade. Veja o exemplo abaixo:
public static void main(String[] args){
		Integer num1 = 10;
		Integer num2 = 10;
		
		System.out.println(num1 == num2); // true
		
		num1 = 128;
		num2 = 128;
		
		System.out.println(num1 == num2); // false
	}

Oi,

Exatamente. Quando você compila um numero literal em Java, é feito da seguinte forma:

Integer b2 =Integer.valueOf(127)

Ou seja, valueOf é implementado para que retorne a mesma instância para valores menores do que 128.

De qualquer maneira, você pode executar seu programa usando as propriedades do sistema (aumentando o high cache)
-Djava.lang.Integer.IntegerCache.high = 999
e o resultado será true.

Tchauzin!

RafaelCassau

Exatamente como a lina disse, o exemplo que citei foi para poder explicar a teoria, creio que isso já esclareceu a duvida que foi mencionada, sendo assim o tópico já pode ser editado para [RESOLVIDO]

Criado 6 de fevereiro de 2013
Ultima resposta 6 de fev. de 2013
Respostas 9
Participantes 7