先來一段代碼,代碼很簡單的,以下:java
public static void main(String[] args) { Integer a = Integer.parseInt("3"); Integer b = Integer.parseInt("3"); Integer c = Integer.parseInt("184"); Integer d = Integer.parseInt("184"); System.out.println(a == b); System.out.println(c == d); }
看到代碼的各位,以爲輸出應該是什麼樣子的呢?false, false 或者 true,true,不知道的請自行調試。。。緩存
這裏代碼輸出的結果是:true, falsespa
why?當我看到這個結果時,這是第一反應(果真我是菜鳥呀……),在網上搜了一下緣由,本人尚未看過Integer.parseInt()的源碼(粗略瞄了一眼,表示沒看懂)。調試
這個大概的緣由是:java會把經常使用的整數(-128 - 127)作一個緩存,因此在調用parseInt(「3」)時,會從緩存中取到相應的數值,而大於127緩存中沒有數據,因此上面的c和d會是兩個不一樣的引用,因此不等。(這是本人的初步理解,記下來之後能夠深刻去看看)。code
有大神用源碼解釋一下的麼,哈哈……blog