Explicação sobre autoboxing - Muito interessante

View: New views
2 Messages — Rating Filter:   Alert me  

Explicação sobre autoboxing - Muito interessante

by Fabrício E. Moreira :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Pessoal,

Bom dia, em meus estudos para certificação nessa manhã chuvosa de sábado, me deparei com algo que não entendi muito bem.
No livro da Kathy Sierra para certificação SCJP( versão em português), na página 135, já no final da página cita uma caracteristica interessante sobre autoboxing que eu gostaria que de algumas explicações maiores pois não entendi muito bem o "por que" disso:
veja:

Integer i1 = 127;
Integer i2 = 127;
       
System.out.println(i1 == i2);    // Imprime true
System.out.println(i1 != i2);     // Imprime false

Mas se alterar o valor para 128 a coisa muda:

Integer i1 = 128;
Integer i2 = 128;
       
System.out.println(i1 == i2);    // Imprime false
System.out.println(i1 != i2);     // Imprime true

A explicação do livro é: "Para economizar memória, duas intancias dos seguintes objetos wrapper serão sempre == quando seus valores primitivos forem o mesmo"  Ai ele cita os tipos Boolean, Byte, Character (de \u0000 até \u007f), Short e Integer de -128 até 127.

Pessoal, não entendi o por que ele faz isso, e já que faz, por que esse limite de valores?

Desculpe tanto "por que" pessoal, é que realmente isso me deixou muito curioso, alguém tem ai uma explicação interessante?

Sds,
Fabrício Entringer Moreira


--
Fabrício Entringer Moreira

Re: Explicação sobre autoboxing - Muito interessante

by Rafael Chaves-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Isso foi discutido aqui há um tempo atrás:

https://rsjug.dev.java.net/servlets/ReadMsg?list=java-l&msgNo=7477

Resumo: auto-boxing de integers equivale a Integer.valueOf(int):

http://java.sun.com/javase/6/docs/api/java/lang/Integer.html#valueOf(int

ao invés de new Integer(int).

O limite de valores é pelo mesmo motivo que um cache de disco em memória
não é do mesmo tamanho do disco. E o número é arbitrário, e uma outra
implementação da biblioteca de classes do Java pode muito bem se
comportar diferentemente (por exemplo, sempre retornar objetos
diferentes, ou ter um número menor ou maior de instâncias pré-criadas,
ou fazer um cache dos N objetos mais usados, etc).

Falou,

Rafael
http://abstratt.com/blog/

Fabrício E. Moreira wrote:

> Pessoal,
>
> Bom dia, em meus estudos para certificação nessa manhã chuvosa de
> sábado, me deparei com algo que não entendi muito bem.
> No livro da Kathy Sierra para certificação SCJP( versão em português),
> na página 135, já no final da página cita uma caracteristica
> interessante sobre autoboxing que eu gostaria que de algumas explicações
> maiores pois não entendi muito bem o "por que" disso:
> veja:
>
> Integer i1 = 127;
> Integer i2 = 127;
>        
> System.out.println(i1 == i2);    // Imprime true
> System.out.println(i1 != i2);     // Imprime false
>
> Mas se alterar o valor para 128 a coisa muda:
>
> Integer i1 = 128;
> Integer i2 = 128;
>        
> System.out.println(i1 == i2);    // Imprime false
> System.out.println(i1 != i2);     // Imprime true
>
> A explicação do livro é: "Para economizar memória, duas intancias dos
> seguintes objetos wrapper serão sempre == quando seus valores primitivos
> forem o mesmo"  Ai ele cita os tipos Boolean, Byte, Character (de \u0000
> até \u007f), Short e Integer de -128 até 127.
>
> Pessoal, não entendi o por que ele faz isso, e já que faz, por que esse
> limite de valores?
>
> Desculpe tanto "por que" pessoal, é que realmente isso me deixou muito
> curioso, alguém tem ai uma explicação interessante?
>
> Sds,
> Fabrício Entringer Moreira
>
>
> --
> Fabrício Entringer Moreira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-l-unsubscribe@...
For additional commands, e-mail: java-l-help@...