韩顺平Java25——包装类01(Interger)
包装类(Warpper)
除了Boolean和Character其他六个包装类都是继承的Number
-
包装类和基本数据类型的转换(以int为例,其他类型以此类推)
// 手动装箱 int -> Interger int n1 = 100; Integer integer = new Integer(n1); Integer integer1=Integer.valueOf(n1); // 手动拆箱 Interger-> int int n2 = integer.intValue();
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
最底层还是new了一个
- 练习
三元运算符要看成是一个整体,Double提升了整体的精度,所以结果是1.0而不是1。
if和else分别计算,所以输出1
-
包装类和String类型的相互转换
1.包装类 - > String
(1)
这里i并没有变化,只是将一个新的字符串赋值给了str1
(2)
(3)
2. String - > 包装类
(1)
因为 Integer.parseInt(str4) 返回的是int类型所以使用了自动装箱
(2)
- 常用方法
- 查看类图
Interger经典面试题
1.
这里第一组是new了两个Interger对象,==比较的是对象的地址,所以是false
第二组使用了Java的自动装箱,底层使用的是valueOf(),这里我们看一下valueOf()的源码
/*This method will always cache values in the range - 128 to 127, *inclusive, and may cache other values outside of thisrange. */ public static Integer valueOf ( int i){ if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);
}
static final Integer cache[];
这个是一个256个数的数组,在这个范围内的时候是通过数组赋值的所以是相等的。
可以看到当传入的int的范围在-128~127之间的时候是直接返回数值的,不在这个范围的才new新的Interger对象
第二组传入的是1,所以是true,第三组传入的是128,超出了范围,走的是new Integer(i),所以是false。
2.
注意示例六和七,在比较的时候只要有基本数据类型==判断的就是值是否相等。
本文来自博客园,作者:紫英626,转载请注明原文链接:https://www.cnblogs.com/recorderM/p/15733970.html