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 ?

Original source

Related problems