Java中Wrapper类的行为

Ana*_*and 3 java wrapper

可能重复:
为什么128 == 128返回false但127 == 127在此代码中返回true?

下面的Java代码返回true

Integer i1=1;
Integer i2=1;
System.out.println(i1==i2);
Run Code Online (Sandbox Code Playgroud)

那么我们在Java中使用String文字常量池的概念的方式,在Java中包装类的情况下我们是否也有类似的概念?

Ami*_*nde 8

Java也有小整数的整数池,-128 to 127因此它对于Integer也会表现相同,也类似于String Constant池

您将在Integer课堂上找到以下代码

private static class IntegerCache {
    static final int high;
    static final Integer cache[];

    static {
        final int low = -128;

        // high value may be configured by property
        int h = 127;
        if (integerCacheHighPropValue != null) {
            // Use Long.decode here to avoid invoking methods that
            // require Integer's autoboxing cache to be initialized
            int i = Long.decode(integerCacheHighPropValue).intValue();
            i = Math.max(i, 127);
            // Maximum array size is Integer.MAX_VALUE
            h = Math.min(i, Integer.MAX_VALUE - -low);
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);
    }

    private IntegerCache() {}
}
Run Code Online (Sandbox Code Playgroud)

同样如下所述:

第5章转换和促销

如果被装箱的值是真,假,一个字节,或者在\ u0000到\ u007f范围内的字符,或者在-128到127(包括)之间的整数或短数字,那么让r1和r2为结果p的任何两个拳击转换.始终是r1 == r2的情况.