先看下面的這個代碼,爲何一樣的都是賦值,卻得不到一樣的結果,也沒有超出int的範圍啊?這是爲何?java
package ppt_test; public class StrangeIntegerBehavior { public static void main(String[] args) { Integer i1=127; Integer j1=127; System.out.println(i1==j1); Integer i2=128; Integer j2=128; System.out.println(i2==j2); } }
原來是由於java中的int是java提供的8種原始數據類型之一。Java爲每一個原始類型提供了封裝類,Integer是java爲int提供的封裝類。int的默認值爲0, 而Integer的默認值爲null。緩存
Integer做爲常量時,對於-128到127之間的數,會進行緩存,也就是說int a1 = 127時,在範圍以內,這個時候就存放在緩存中,當再建立a2時,java發現緩存中存在127這個數了,就直接取出來賦值給a2,因此a1==a2的。當超過範圍就是new Integer()來new一個對象了,因此a、b都是new Integer(128)出來的變量,因此它們不等。spa