doublea=1.2;Doubleb=1.2;//pelo exemplo abaixo, vê-se que b sofre auto-unboxing.System.out.println(a==b?"\"b\" sofreu auto-unboxing.":"\"a\" sofreu autoboxing");System.out.println(b==a?"\"b\" sofreu auto-boxing.":"\"a\" sofreu auto-unboxing");
Na comparação de um double com um Double (serve para Integer e int e demais), eu quero saber o que está acontecendo na comparação. Ao comparar um double com um Double (double == Double), o primeiro sofre autoboxing e as referências dos dois objetos são comparados, ou o segundo sofre auto-unboxing, ocorrendo uma comparação de valores? Eu verifiquei com o programa acima que o lado direito da comparação é quem sempre sofre a ação, autoboxing ou auto-unboxing. Lembrando que não existe pool de Doubles, assim, se a igualdade for verdadeira (primeira impressão), a única forma de isso ter acontecido é b ter sofrido um auto-unboxing. Se o contrário tivesse acontecido, teríamos dois objetos Double com suas referências sendo comparadas. Isso seria falso, pois teríamos dois objetos Double diferentes.
Alguém pode me confirmar isso? Às vezes posso estar deixando algum conceito passar…
O programa sempre está comparando um double com um double...não tem boxing. Não entendi como ele me ajuda.
R
Rodrigo_Sasaki
Suas Strings estão te confundindo, na segunda expressão você deixou assim:System.out.println(b==a?"\"b\" sofreu auto-boxing.": "\"a\" sofreu auto-unboxing");Só que “B” nunca vai sofrer Boxing, sempre Unboxing. Se você corrigir as Strings vai ter o resultado apropriado. Resumindo, é sempre “b” que sofre unboxing nos seus exemplos
V
ViniGodoy
Ele te ajuda justamente pelo fato de normalmente, numa comparação assim, você querer comparar valores, e não referências. Até pq, não existe referência num tipo primitivo.
E
ECO2004
doublea=1.2;Doubleb=1.2;//pelo exemplo abaixo, vê-se que b sofre auto-unboxing.System.out.println(a==b?"\"b\" sofreu auto-unboxing.":"\"a\" sofreu autoboxing");System.out.println(b==a?"\"b\" sofreu auto-unboxing.":"\"a\" sofreu auto-boxing");
Olhe a impressão do programa:
"b"sofreuauto-unboxing."b"sofreuauto-unboxing.
Eu corrigi…
É isso que eu queria saber: sempre que eu estiver comparando um objeto wrapper (Integer, Double…) com algum tipo primitivo (respectivo), sempre o objeto que sofre auto-unboxing, e nunca o primitivo sofre auto-boxing, correto?