integer的创建问题
Integer i = 1;Integer i2 = 1;
这种创建类型,i在堆中是否有对象
- 有对象
对象引用的是常量池?缓存?还是在创建对象的时候同时创建一个缓存?如果是缓存,i2是谁的引用呢? - 没对象
是在栈中直接保存的数值还是栈中保存的常量池地址?还是缓存?
integer的创建问题
Integer i = 1;Integer i2 = 1;
这种创建类型,i在堆中是否有对象
有对象,Integer i = 1相当于是Integer i = Integer.valueOf(1),这个valueOf方法会判断传入的整型参数的值是否在[-128,127]范围内,在的话,直接赋值IntegerCache里的一个对象,而这个对象是在加载类的时候就已经创建的(静态代码块执行)。
Integer i2 = 1同上,所以i2 == i 为true。