Igualdade de objetos

6 respostas
rsaraiva

Olá pessoal!

Integer i1 = 127;

Integer i2 = 127;

Integer i3 = 128;

Integer i4 = 128;

Alguém poderia me explicar porque (i1==i2) é true e (i3 == i4) é false? Isso tem a ver com o tamanho do byte ?

Abraço.

6 Respostas

rsaraiva

Hehe… já ache aqui.

Para economizar memória, duas instâncias wrapper serão sempre == quando os seus valores primitivos forem o mesmo:

Boolean
Byte
Character (até 127)
Short e Integer (até 127)

esdras_63

rsaraiva:
Hehe… já ache aqui.

Para economizar memória, duas instâncias wrapper serão sempre == quando os seus valores primitivos forem o mesmo:

Boolean
Byte
Character (até 127)
Short e Integer (até 127)


Isso quer dizer que não é possível comparar dois java.lang.Integer maiores que 127?

A

esdras_63:
rsaraiva:
Hehe… já ache aqui.

Para economizar memória, duas instâncias wrapper serão sempre == quando os seus valores primitivos forem o mesmo:

Boolean
Byte
Character (até 127)
Short e Integer (até 127)


Isso quer dizer que não é possível comparar dois java.lang.Integer maiores que 127?

Não, carinha, isso quer dizer que para se comparar dois objetos java quanto a igualdade de conteúdo se deve utilizar sempre o EQUALS:

Integer i= 127;
Integer j=127;

System.out.println(i.equals(j));
ViniGodoy

Engraçado, essa pergunta surgiu no fórum há 2 dias atrás:
http://www.guj.com.br/java/263385-referencia-na-memoria-com-inteiros

ViniGodoy

É bom lembrar que esse código:

Integer i1 = 127; Integer i2 = 127; Integer i3 = 128; Integer i4 = 128;

É equivalente a esse código aqui:

Integer i1 = Integer.valueOf(127); Integer i2 = Integer.valueOf(127); Integer i3 = Integer.valueOf(128); Integer i4 = Integer.valueOf(128);

E que a classe Integer é uma classe, não um tipo primitivo. Portanto, como o colega ali falou, comparações devem ser feitas pelo método equals. Ou então, use o tipo primitivo mesmo:

int i1 = 127; int i2 = 127; int i3 = 128; int i4 = 128;

O que faz com que um Integer se transforme automaticamente num int, e vice versa, é uma característica implementada no Java 5 chamada de AutoBoxing.

esdras_63

É que como uso hibernate e uma ferramenta para engenharia reversa, utilizo a classe Integer para representar os números inteiros do MySQL. Porém sempre comparei com == e agora fiquei com medo hehehe.

Criado 22 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 6
Participantes 4