本文共 1975 字,大约阅读时间需要 6 分钟。
int包装类对象创建输出两者的值相同,但是比较两个引用名不同,因为在堆中开辟的是不同地址的内存空间。直接打印输出integer包装类的变量名输出的不是hashcode而是数据,说明integer整型底层重写了toString方法,直接打印输出了integer类型变量的数据。Integer重写了父类object的toString方法。输出不是hashcode是因为底层重写了toString方法。堆内存中比较的是地址值,因此num1==num2为false。
装箱通过valueof方法来实现
100是常量,存储在常量池中,num1和num2共同指向同一个内存地址,所以num1==num2,而new出的内存存储在堆内存中地址值肯定是不同的
static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) // 循环存储数组元素 -128-127 cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {}}
==拆箱:将一个包装类对象赋值给一个基本数据类型的变量 ==
底层利用基本数据类型+value关键字(intValue,doubleValue)转载地址:http://nknwi.baihongyu.com/