先來一段代碼,代碼很簡單的,如下:
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, false
why?當我看到這個結果時,這是第一反應(果然我是菜鳥呀……),在網上搜了一下原因,本人還沒有看過Integer.parseInt()的源碼(粗略瞄了一眼,表示沒看懂)。
這個大概的原因是:java會把常用的整數(-128 - 127)做一個緩存,所以在調用parseInt(“3”)時,會從緩存中取到相應的數值,而大於127緩存中沒有數據,所以上面的c和d會是兩個不同的引用,所以不等。(這是本人的初步理解,記下來以后可以深入去看看)。
有大神用源碼解釋一下的么,哈哈……