诡异的Integer

先看下面的这个代码,为什么同样的都是赋值,却得不到同样的结果,也没有超出int的范围啊?这是为什么?

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)出来的变量,所以它们不等。

猜你喜欢

转载自www.cnblogs.com/xp-thebest/p/11704228.html
今日推荐