題目:
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不能夠互用,因為他們兩種不同的資料...