Integer 中的快取類IntegerCache

2021-07-30 22:21:33 字數 1266 閱讀 7273

題目:

public class test 

}

結果是:
true

false

true

可是為什麼呢?翻閱dk的原始碼,發現:
public static integer valueof(string s) throws numberformatexception 

public static integer valueof(int i)

發現裡面另有玄機,多了個integercache類:
private static class integercache  catch( numberformatexception nfe) 

}high = h;

cache = new integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new integer(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >= 127;

}private integercache() {}

}

原來integer把-128到127(可調)的整數都提前例項化了。 這就解釋了那道面試題的答案,原來你不管建立多少個這個範圍內的integer用valueof出來的都是同乙個物件。

但是為什麼jdk要這麼多此一舉呢? 我們仔細想想, **的商品大多數都是100以內的**, 一天後台伺服器會new多少個這個的integer, 用了integercache,就減少了new的時間也就提公升了效率。同時jdk還提供cache中high值得可配置,

private static class longcache 

static final long cache = new long[-(-128) + 127 + 1];

static

}

long也做了快取,只是沒有提供調整機制, 在short中類似:
private static class shortcache 

static final short cache = new short[-(-128) + 127 + 1];

static

}

Integer 中的快取類IntegerCache

2014年去某公司筆試的時候遇到這麼一道題 public class test 問列印的結果的多少?但是我回答的是false,後來仔細想想應該沒有這個簡單,就翻了下jdk的原始碼,發現 public static integer valueof string s throws numberforma...

Integer類的快取機制

檢視integer的原始碼,就會發現裡面有個靜態內部類。該類的作用是將數值等於 128 127 預設 區間的integer例項快取到cache陣列中。通過valueof 方法很明顯發現,當再次建立值在 128 127區間的integer例項時,會復用快取中的例項,也就是直接指向快取中的integer...

Integer 和int的區別

1.int是基本的資料型別,直接存數值 2.integer是int的封裝類 integer 是物件,用乙個引用指向這個物件 integer 是乙個類,是int的擴充套件,定義了很多的轉換方法。3.int和integer都可以表示某乙個數值 4.int和integer不能夠互用,因為他們兩種不同的資料...