package blogtest.oop2.demo05;
public class Main {
public static void main(String[] args) {
Integer integer = new Integer(100);
Integer integer1 = new Integer(100);
System.out.println(integer==integer1);
Integer integer2 = Integer.valueOf(100);
Integer integer3 = Integer.valueOf(100);
System.out.println(integer2==integer3);
Integer integer4 =200;
Integer integer5 = 200;
System.out.println(integer4==integer5);
}
}
- 如代码所示,我们第一个用的是new关键字,也就是调用构造方法,此时他会在堆里面开辟两个新的空间,这里比较的是地址,两个空间的地址是绝对不一样的,所以就是false
- 第二个则是自动装箱,这个有点特殊,我这里因为是方便看,所以就直接写出来了,原来是
Integer integer2 = 100;
Integer integer3 = 100;
- 但是这里为什么会输出true,因为这里自动装箱实际上是IDEA帮我们完成了调用valueOf这个步骤,我们是不用写出来的,我们也可以在源码中查看valueOf这个方法
我们可以发现,在这里他做了一个判断(low==-128;h==127)也就是在如果输入的数据是在low和high的这个范围之内,他会返回一个类似数组的东西(这里就把他理解成在这个区间内会比较的是两个对象的实际内容),如果不是,则会返回一个新的地址,就是在堆里开辟两个空间,创建两个地址(也就是比较地址)所以第三个返回的false