Integer是int的包裝類,在jdk1.5以上,能夠實現自動裝箱拆箱,就是jdk裏面會自動轉換,不須要手動去強轉。對象
但Integer是對象,而 == 比較的是堆中的地址,有意思的是, 若是 Integer a = 123, Integer b = 123,用==比較能夠返回true,但若是Integer a = 12345, Integer b = 12345,用==比較返回false,來看下Integer的源碼內存
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
默認IntegerCache.low 是-127,Integer.high是128,若是在這個區間內,它就會把變量i當作一個變量,放到內存中;但若是不在這個範圍內,就會去new一個Integer對象,若是兩個Integer值都不在這個範圍內,jdk就會new兩個實例,這樣再用==,確定是false。源碼
因此若是要比較Integer的值,比較靠譜的是經過Integer.intValue();返回的結果是int值,就能夠直接比較了;或者直接用equals()比較。變量