Brincando com Autoboxing

Brincadeiras interessantes pra quem esta aprendendo sobre as entranhas do autoboxing.

  1. Quando você faz o boxing novamente, uma nova Integer é criada? :
Integer o = 5;
int i = o;
Integer o2 = i;

System.out.println(o == o2);
  1. Continuando, será que se eu gerar um int de forma diferente, o autoboxeado vai ser um objeto diferente?
int a = 2;
int b = 3;
int c = a + b;

System.out.println(o == c);
  1. Mais um pouco, forcando um new, esperamos que ele nao brinque com a gente :slight_smile:
Integer x1 = 5;
Integer x2 = new Integer(5);

System.out.println(x1 == x2);

Se você continuar com isso:

Object oo = x1;
System.out.println(oo == 5);

Não compila, pois você esta comparando object com int, e aí o autoboxing não rola.

Nao coloquem o resultado aqui. Todo mundo tem de testar para aprender.

Dica - experimentem usar um int com valor maior, digamos 1000, e veja se continua funcionando…

eu queria saber se tem algum lugar deixando bem claro de quando ele deixa no pool ou nao, assim como tem bem explicado o de String no intern(). Voce sabe thingol?

Aham, o pessoal da Sun deixou até disponível um preview da nova especificação da linguagem, em http://java.sun.com/docs/books/jls/java_language-3_0-mr-spec.zip.

Em jls/chapter-5-conversions.pdf, página 92 (ou 10 segundo o Adobe Acrobat Reader), está explicado isso. Estou reproduzindo o texto que importa.
[i]
DRAFT

If p is a value of type int, then boxing conversion converts p into a reference r of
class and type Integer, such that r.intValue() == p.

If the value p being boxed is true, false, a byte, a char in the range u0000 to u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
DISCUSSION
Ideally, boxing a given primitive value p, would always yield an identical reference. In practice, this may not be feasible using existing implementation techniques. The rules above are a pragmatic compromise. The final clause above requires that certain common values always be boxed into indistinguishable objects. The implementation may cache these, lazily or eagerly.
[/i]

Essa especificação ainda não é a definitiva, o Gilad Bracha e outros caras da Sun deve estar arrematando os detalhes. Depois que aquele monte de gente saiu da Sun para ir trabalhar (melhor, ir pegar as ações) lá no Google, não sei como é que está o ambiente lá…

socorro!
o link ta errado, manda o link denovo? ta dando 404.

poxa, a VM saiu e a spec ta beta ainda… heheeheh. a spec eh feita baseada noa VM, e nao vice versa

http://java.sun.com/docs/books/jls/java_language-3_0-mr-spec.zip

É que tem um ponto final depois do .zip, isso é que deu pau…

Atire a primeira pedra quem nunca fez “engenharia reversa” - primeiro faz o troço funcionar, depois vê porque é que funcionou, e escreve um documento dizendo como foi implementado…

[quote=“thingol”]
Atire a primeira pedra quem nunca fez “engenharia reversa” - primeiro faz o troço funcionar, depois vê porque é que funcionou, e escreve um documento dizendo como foi implementado…[/quote]

Que só sai quando o cliente manda o advogado dele ligar pra você…

Quem quiser brincar com o Tiger e não começou ainda, faz download da apresentação do Java5 no ultimo JavaOne que foi bem legal.

Quem não foi no Abaporu perdeu uma boa palestra sobre o Java5 pelo Einar Saukas. Ultimamente estou dando uma boa testada no Java5, mas estou ancioso pelo EJB 3.0. Java5 + jsf + ejb 3.0 vai ser show de bola. Pra quem tem medo de ejb o 3.0 vai ficar bem mais simples usando anotations.

[quote=“Flin”]Quem quiser brincar com o Tiger e não começou ainda, faz download da apresentação do Java5 no ultimo JavaOne que foi bem legal.

Quem não foi no Abaporu perdeu uma boa palestra sobre o Java5 pelo Einar Saukas. Ultimamente estou dando uma boa testada no Java5, mas estou ancioso pelo EJB 3.0. Java5 + jsf + ejb 3.0 vai ser show de bola. Pra quem tem medo de ejb o 3.0 vai ficar bem mais simples usando anotations.[/quote]

backQuote.replaceAll("medo", "nojo");

:stuck_out_tongue: