Integer是一個看著挺簡單的,其實還是有點不一樣,Integer是一個int的包裝類,它是可以起到緩存作用的,在java基礎里說過它的範圍是(-128-127)在這個返回是有緩存的,不會創建新的Integer對象,並且可以設置它的最大值,通過設置VM參數。 下麵先看一下源碼: 通過設置VM的ja ...
Integer是一個看著挺簡單的,其實還是有點不一樣,Integer是一個int的包裝類,它是可以起到緩存作用的,在java基礎里說過它的範圍是(-128-127)在這個返回是有緩存的,不會創建新的Integer對象,並且可以設置它的最大值,通過設置VM參數。
下麵先看一下源碼:
public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); }
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() {} }
// value of java.lang.Integer.IntegerCache.high property (obtained during VM init) private static String integerCacheHighPropValue; static void getAndRemoveCacheProperties() { if (!sun.misc.VM.isBooted()) { Properties props = System.getProperties(); integerCacheHighPropValue = (String)props.remove("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) System.setProperties(props); // remove from system props } }
通過設置VM的java.lang.Integer.IntegerCache.high可以調整它的最大值。雖然它是在一個靜態代碼塊里是一個常量,但是是在初始化的時候賦值的,所以沒什麼影響。
演示修改JVM參數(eclipse):
package test1; public class Demo1 { public static void main(String[] args) { System.out.println(Integer.valueOf(200)==Integer.valueOf(200)); } }
輸出結果:
false
怎麼修改呢,看下麵?
點擊自己創建的項目,右鍵->Debug as ->Debug Configurations ->JavaApplication->點擊自己的項目->Arguments->VM arguments設置->Apply->Debug
設置以後的結果: