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

来源:互联网 发布:读出文字的软件 编辑:程序博客网 时间:2024/06/08 10:18

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。