Integer比较陷阱
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。
转载地址:http://blog.csdn.net/qq_34114951/article/details/76034562