Integer陷阱(0~127和其他 数值相等对象比较)

Integer 类在对象中包装了一个基本类型 int 的值。
有一个陷阱存在,经常出现在面试题中,情况如下面代码

public class IntegerDemo {
	public static void main(String[]args){
		Integer a = 200;
		Integer b = 200;
		System.out.println(a==b);//false
		System.out.println(a.equals(b));//true
		
		//数据在byte范围内,JVM不会从新new对象
		Integer aa = 127;
		Integer bb = 127;
		System.out.println(aa==bb);//true
		System.out.println(aa.equals(bb));//false
		
		Integer aaa = 128;
		Integer bbb = 128;
		System.out.println(aaa==bbb);//false
		System.out.println(aaa.equals(bbb));//true
	}
}	

在0~127范围内,JVM不会从新分配对象。这时直接比较两个数值相等的对象时,答案为true.
而其他范围内,需要重新创建对象,这时直接比较两个数值相等对象,是在比较两个对象的引用地址,这时答案为false。

posted @ 2017-08-18 16:40  17十七  阅读(333)  评论(0编辑  收藏  举报