Possible Duplicate:
Integer wrapper objects share the same instances only within the value 127?
How != and == operators work on Integers in Java?
I tried to compare two ints with the following cases and got unexpected results
-
when I did the following, @@@ was printed.
class C { static Integer a = 127; static Integer b = 127; public static void main(String args[]){ if(a==b){ System.out.println("@@@"); } } } -
when I did the following, @@@ was not printed.
class C { static Integer a = 145; static Integer b = 145; public static void main(String args[]){ if(a==b){ System.out.println("@@@"); } } }
Can anyone tell me what could be the reason.
You’re comparing the objects’ identities. For values lower than 128 the Integer class caches its objects. That’s why it is equal in the first example. The other example is with higher values that are not cached.
As @niklon pointed out there is also a lower border of -128 for caching.
Upper border can be adjusted with a VM arg
-Djava.lang.Integer.IntegerCache.high=4711.Further reading in Peter’s interesting blog post:
http://vanillajava.blogspot.co.uk/2012/01/surprising-results-of-autoboxing.html