Método intValue()

O método xxXValue() muda á referencia de um objeto?

Por exemplo, se eu fizer um objeto Integer receber ele mesmo porém usando o método intValue(), vai acontecer um autoBoxing, quando ocorre esse autoBoxing é criado outro objeto?

segue um exemplo:

[code]Integer a = new Integer(25);
Integer b = a;

	Integer c = a;
	c = c.intValue();
	
	System.out.println(c == a);// retorna false[/code]
Integer a = new Integer(25);
		Integer b = a;
		
		Integer c = a;
		c = c.intValue();
		
		System.out.println(c.equals(a));// retorna true

Tem aqui no GUJ http://www.guj.com.br/article.show.logic?id=146 esse artigo sobre autoboxing, não sei se vc já leu ele.

Pelo que entendi no seu exemplo, ele cria um novo objeto, por isso no seu teste ele retorna falso. No teste que fiz retorna true pq é apenas a comparação do conteudo do objeto e não do objeto em si.

se for referencia na memoria muda sim +)

Tava voltando pra casa e acabei pensando nessa situação que vc postou.

Integer a = new Integer(25);
		Integer b = a;
		
		Integer c = a;
		c = c.intValue();
		
		System.out.println(c == a);// retorna false

O que acontece é que quando vc cria: Integer a = new Integer(25); vc está criando um objeto.

Quando faz: Integer c = a; o que acontece é que c recebe uma cópia do objeto criado. Por isso se vc fizer o teste: System.out.println(c == a); logo em seguida o retorno será true.

Mas quando faz: c = c.intValue(); vc está fazendo um Unboxing que na verdade é quando você quer converter o valor de um objeto para seu correspondente tipo primitivo.

O boxing é o contrário, quando vc quer corresponder o tipo primitivo para um objeto.

no caso C é no momento um objeto, já que ele é uma cópia de A. Quando vc faz: c = c.intValue(); vc então passa a transformar seu objeto em um tipo primitivo.

Então seria mais ou menos assim em outras palavras:

O processo de Encapsular um Tipo Primitivo em um Objeto chamamos de Boxing.

O processo de Desencapsular um Objeto em um Tipo Primitivo chamamos de UnBoxing.

A partir do Java 5 esse mecanismo passou a ser automatico e chamado então de AutoBoxing, coisa que era feita manualmente pelos programadores até o java 1.4.

Mas romarcio, essa situação é curiosa, porque quando temos uma comparação com esse operador com um valor menor ou igual que 127, ele não verifica mais as referências, mas sim, os valores não é?
Por causa disso não deveria retornar True?

Cara eu sei o que é autoboxing e sei o que unboxing, eu sei que c.intValue() retorna um tipo primitivo, quero saber se ao fazer c.intValue() quando ele faz um boxing irá ser criado um novo objeto.

Nesse caso eu acredito que sim, cria um novo objeto, e é por isso que no teste System.out.println(c == a); o retorno é false. Vc compara objetos e não valores, embora os valores sejam 25 em ambos, os objetos são diferentes.

[quote=Jaba]Mas romarcio, essa situação é curiosa, porque quando temos uma comparação com esse operador com um valor menor ou igual que 127, ele não verifica mais as referências, mas sim, os valores não é?
Por causa disso não deveria retornar True?[/quote]

Pelo que sei funciona +/- assim:

Se for Comparado com == você está verificando se as duas variáveis fazem referência ao mesmo objeto.

Com .equals() você verifica se o ‘valor’ armazenado é o mesmo.

No caso citado anteriormente,

Integer a = new Integer(25); vc cria um objeto do tipo Integer.
Quando fez Integer c = a; Vc cria em C uma cópia exata de A, então se nesse momento fazer o teste System.out.println(c == a); o retorno será true;

Mas quando faz c = c.intValue(); //ou se fizesse c = a.intValue(); dai vc não está atribuindo o Objeto e sim o valor, dai C passa a ser um novo objeto e consequentemente o teste System.out.println(c == a); terá retorno false;