1.Integer num = 1000; 底层执行过程。
Integer num3 = 1000; // 等价于 Integer.valueOf(1000)
分为两个步骤
1.查询JVM缓存,如果存在,直接返回对象地址
2.如果不存在,执行 new Integer(i)
2.Integer对象的使用==进行比较,其实是在比较对象地址。
public class Learn_1 {
public static void main(String[] args) {
Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1 == num2);
Integer num3 = 1000; // 等价于 Integer.valueOf(1000)
Integer num4 = 1000;
System.out.println(num3 == num4);
}
}
结果: true ,false
解析:
第一个比较结果为true,是因为JVM启动时缓存了-128--127 ,直接从JVM缓存获取对象,因此地址相同。
第一个比较结果为true,因为JVM没有缓存,直接在堆中新生成对象,因此地址不相同。