Integer wrapper class and == operator - where is behavior specified?
boxing, comparison, java, unboxing
Solution
Because of this code in `Integer.valueOf(int)`:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
Explanation:
`Integer integer1 = 127` is a shortcut for `Integer integer1 = Integer.valueOf(127)`, and for values between -128 and 127 (inclusive), the Integers are put in a cache and returned multiple times, while higher and lower numbers generate new Integers each time.
Problem
``` Integer integer1 = 127; Integer integer2 = 127; System.out.println(integer1 == integer2);//true integer1 = 128; integer2 = 128; System.out.println(integer1 == integer2);//false ``` I found it returns == (if it is) under the range of `-128 - 127` , why is there such specification ?