What will be the output of the following code?

public class IntTest {
    public static void main(String[] args) {
        Integer i1 = 1;
        Integer i2 = new Integer(1);
        Integer i3 = Integer.valueOf(1);
        System.out.println((i1 == i2) + " " + (i1 == i3) );
    }
}
Explanation
The code flow is as follows:
1. The compiler evaluates Integer i1 = 1; to Integer i1 = Integer.valueOf(1);
2. The Integer.valueOf() method is caching the values between -128 and 127, hence no new object is created. 3. Integer i2 = new Integer(1); here, a new Integer type object is created, and it's reference is assigned to i2 4. Integer i3 = Integer.valueOf(1); according to p1 and p2 - this statement is equivalent to Integer i1 = 1;, no new object is created, the value being taken from cache, hence i3 and i1 are referencing the same (cached) object.
Consequently, i1 == i2 will return false, since i1 references a cached object, while i2 - a newly created object. Finally, i1 == i3 will return true, since both variables are referencing the same cached value.

Follow CodeGalaxy

Mobile Beta

Get it on Google Play
Send Feedback
Cosmo
Sign Up Now
or Subscribe for future quizzes