詭異的Integer

先看下面的這個代碼,爲何一樣的都是賦值,卻得不到一樣的結果,也沒有超出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做爲常量時,對於-128127之間的數,會進行緩存,也就是說int a1 = 127時,在範圍以內,這個時候就存放在緩存中,當再建立a2時,java發現緩存中存在127這個數了,就直接取出來賦值給a2,因此a1==a2的。當超過範圍就是new Integer()來new一個對象了,因此a、b都是new Integer(128)出來的變量,因此它們不等。spa

相關文章
相關標籤/搜索