Search code examples
javaautoboxingunboxing

Autoboxing Unboxing Operator (!=) and (==) difference


public class T1 {    

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Integer i1 = 1000;
        Integer i2 = 1000;
        if(i1 != i2) System.out.println("different objects");
        if(i1.equals(i2)) System.out.println("meaningfully equal");    

    }

}

O/P for this is:

different objects
meaningfully equal

Where as

public class T2 {    

    public static void main(String[] args) {            

        Integer i3 = 10;
        Integer i4 = 10;
        if(i3!=i4)System.out.println("Crap dude!!");
        if(i3 == i4) System.out.println("same object");

        if(i3.equals(i4)) System.out.println("meaningfully equal");    
    }

}

Produces Following O/P:

same object
meaningfully equal

I didn't understand why in class T2 if(i3!=i4) didn't get triggered I'm refering SCJP 1.6 but not able to understand.
Please help me.


Solution

  • This is because 10 is in between the range [-128, 127]. For this range == works fine since the JVM caches the values and the comparison will be made on the same object.

    Every time an Integer (object) is created with value in that range, the same object will be returned instead of creating the new object.

    See the JLS for further information.