Referencia na memória com inteiros

3 respostas
D

boa noite, gostaria de saber por que dois números inteiros iguais com valores menores que 127 ficam na mesma referencia, já se for 128 muda a referencia?

public class Wraper {
	public static void main(String[] args) {
		Integer i = 127;
		Integer i2 = 127;
		
		if (i==i2) System.out.println("i e i2 estão na mesma referência");
			
		Integer i3 = 128;
		Integer i4 = 128;
		
		if (i3==i4) System.out.println("i3 e i4 estão na mesma referência");			
	}
}

saída: i e i2 estão na mesma referência

3 Respostas

ViniGodoy

Por que a Sun decidiu criar um cache com endereçamento de apenas 1 byte.
Como você sabe, um byte representa até 255 números. Portanto, o Java tem internamente um array de Integers que vai de -126 até 127, e reusa sempre esses valores quando necessário.

A razão para criar um cache desses é basicamente desempenho. Como são valores muito comuns, poupa-se processamento evitando cria-los e destruí-los o tempo todo.

ribclauport

Por que a Sun decidiu criar um cache com endereçamento de apenas 1 byte.
Como você sabe, um byte representa até 255 números. Portanto, o Java tem internamente um array de Integers que vai de -126 até 127, e reusa sempre esses valores quando necessário.

Viny, desculpe comentar um tópico antigo, mas fiquei com uma dúvida, estava vendo o post para revisar a questão sobre cache para a prova scjp, e me deparei com o range citado no seu post, gostaria de saber se está correto esse range, pois no livro e em outros lugares que vi consta o range de -128 = -2^7 até 127 já que o zero é reprentado também e ocupa um byte, e não [color=red]-126 [/color]até 127

ViniGodoy

Você está certo. Devo ter me enganado na época.

Criado 20 de janeiro de 2012
Ultima resposta 24 de abr. de 2012
Respostas 3
Participantes 3