Issue
Integer doesn't behave as a Reference Type. For example code below produces unexpected result
class Playground {
public static void main(String[ ] args) {
Integer i = 10;
Integer num = i;
i--;
System.out.println("i = " + i);
System.out.println("num = " + num);
}
}
OUTPUT:
i = 9
num = 10
I have expected "num" to be 9 as well cause Integer "num" references Integer "i". The substractaction happens here from the same object num is referencing, but looks like "-" operator is overriding some behaviour and creates an new Integer object. What exactly is happening here? And what other classes behave like that?
Solution
Integer
objects are immutable.
After Integer num = i;
the local variable num
references the same Integer
object as i
- specifically an Integer
object that contains the value 10.
But when you write i--;
then i
can no longer reference the same Integer
object as num
- the local variable i
gets assigned with a reference to an Integer
object that contains the value 9.
Since num
was not assigned to it still references the Integer
object with the value 10.
Answered By - Thomas Kläger
Answer Checked By - Mildred Charles (JavaFixing Admin)