Вопрос

I am confuse about autoboxing unboxing in java. Please see my following two progarm.

Integer x = 400;
Integer y = x;
x++; x--;
System.out.println((x==y));

The output is false. 
I known why the output is false. Because of autoboxing x.

Integer x = 100;
Integer y = x;
x++; x--;
System.out.println((x==y));

The output is true.
But the program is same as the upper. Why the output is true? 
Please explain me detail.

Thank you very much.

Это было полезно?

Решение

This is because Integers -128 to 127 are cached, so in second example x and y refer to the same Integer instance.

Integer x = 100;          // x refers to cached 100
x++; 

is equivalent to

int var = x.intValue();
var++;
x = Integer.valueOf(var);  // returns cached 100

See Integer.valueOf(int) API.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top