Duvida com equals e ==

6 respostas
B

Bom dia senhores,

Estudando para a certificação, me deparei com o seguinte comportamento:

Integer i1 = 127;
Integer i2 = 127;

if (i1 == i2 ) System.out.println("== - i1 e i2");
if (i1 != i2 ) System.out.println("!= - i1 e i2");
if (i1.equals(i2) ) System.out.println("equals - i1 e i2");

Integer i3 = 128;
Integer i4 = 128;

if (i3 == i4 ) System.out.println("== - i3 e i4");
if (i3 != i4 ) System.out.println("!= - i3 e i4");
if (i3.equals(i4) ) System.out.println("equals - i3 e i4");[

A saída foi:

== - i1 e i2
equals - i1 e i2
!= - i3 e i4
equals - i3 e i4

compilei e rodei com java 5.

gostaria de saber porque quando utilizo Integers até 127 (linha 1) tenho um comportamento diferente de quando uso Integers acima de 127(linha 3).

alguém?

6 Respostas

T

No Java 5, os objetos Integer criados via autoboxing ou via Integer.valueOf que estiverem entre -128 e +127 são puxados de um cache que contém 256 valores ( de -128 até +127 ). Esse cache é estático e criado durante a inicialização do programa.
Se o objeto estiver fora desse intervalo, então o autoboxing ou Integer.valueOf cria um novo Integer sempre.

marcosharbs

nunca tinah visto isso também, então um Integer possui 8 Bits certo?
e ele é de sinal, teria como eu dizer para o Integer ignorar o sinal?

T

marcosharbs:
nunca tinah visto isso também, então um Integer possui 8 Bits certo?
e ele é de sinal, teria como eu dizer para o Integer ignorar o sinal?

Não, um Integer é um encapsulamento de um int, que tem 32 bits em Java. Não se pode “ignorar o sinal” (não existe um “unsigned int” em Java), mas você pode usar alguns truques.

marcosharbs

hmmm entendi obrigado thingol

B

Obrigado thingol.

não sabia dessa paradinha!

valew mesmo

A

acima de 128 quer dizer que não fica no mesmo objeto?

Criado 10 de julho de 2009
Ultima resposta 25 de jun. de 2010
Respostas 6
Participantes 4