Целочисленный объект является неизменным, любое изменение в существующем объекте создаст новый объект. Таким образом, после a++
будет создан новый объект, и a
начнет указывать на этот новый объект, в то время как b
все еще указывает на старый объект. Следовательно, после a++
, a
и b
указывают на разные объекты и a == b
всегда будет возвращать false.
относительно упомянутого примера:
Integer a; //created Integer reference
Integer b; //created Integer reference
a = new Integer(2);//created new Integer Object and a reference is assigned to that new object
b = a;//b also start pointing to same Integer object
if(b == a) { // b==a will be true as both are pointing to same object
System.out.println("Strange");
}
a++; //after a++ , a new Integer object will be created (due to Integer immutablity and a will point to that new object while b is still pointing to old), so b==a will be false
if(b == a) {
System.out.println("Stranger");
}
a--; //again a new Integer Object will be created and now a will start pointing to that new Object , so b==a will be false
if(b == a) {
System.out.println("Strangest");
}