1. 程式人生 > >java的面試題:緩衝池(-128~127)

java的面試題:緩衝池(-128~127)

/*
 * 看程式寫結果
 * 
 * 注意:Integer的資料直接賦值,如果在-128到127之間,會直接從緩衝池裡獲取資料
 */
public class IntegerDemo {
    public static void main(String[] args) {
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2);
        System.out.println(i1.equals(i2));
        System.out
.println("-----------"); Integer i3 = new Integer(128); Integer i4 = new Integer(128); System.out.println(i3 == i4); System.out.println(i3.equals(i4)); System.out.println("-----------"); Integer i5 = 128; Integer i6 = 128; System.out.println
(i5 == i6); System.out.println(i5.equals(i6)); System.out.println("-----------"); Integer i7 = 127; Integer i8 = 127; System.out.println(i7 == i8); System.out.println(i7.equals(i8)); // 通過檢視原始碼,我們就知道了,針對-128127之間的資料,做了一個數據緩衝池,如果資料是該範圍內的,每次並不建立新的空間 Integer ii = Integer.valueOf
(127); } }

結果如下:
false

true

false

true

false // 這裡是因為開闢了新的空間。

true

true
true

這裡可以參照 jdk 中的原始碼:

* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
        return new Integer(i);
    }

當在 -128~127之外才重新 new Integer(i);