| 包装类 | 基本数据类型 |
|---|---|
| Integer | int |
| Short | short |
| Long | long |
| Byte | byte |
| Float | float |
| Double | double |
| Character | char |
| Boolean | boolean |
2. 包装类的使用装箱和拆箱(boxing&&unboxing) 2.1 自动的拆装箱基本就是类型的首字母大写,除了 Integer 和 Character
public static void main1(String[] args) {
Integer a = 10;
Integer b = new Integer(10);
int c = a;
}
调用反汇编工具:javap -c 字节码文件名
我们从反汇编中得知
- 装箱调用的 Integer.valueOf 方法
- 拆箱调用的 .intValue 方法
分析装箱过程
我们进入 valueOf 查看
我们发现 valueOf 只能穿入 String , int 类型的数据。其中 valueOf(String, int) 中的 int 代表的是进制数, 一般不常用这个方法
拆箱过程
2.2 手动的拆装箱没有加 static 修饰
public static void main(String[] args) {
Integer a = Integer.valueOf(1);// 手动装箱
int b = a.intValue();// 手动拆箱
short s = a.shortValue();
long l = a.longValue();
byte b = a.bytevalue();
double d = a.doublevalue();
float f = a.floatValue();
}
总结
- 装箱: 包装类.valueOf 方法
- 拆箱: int/float/double/short/byte/long+ValueOf
- 没有 .boolValueOf, .charValueOf 和 .StringValueOf 方法
取值范围
Integer x = 127;
Integer y = 127;
System.out.println(x == y);
System.out.println("==========");
Integer xx = 128;
Integer yy = 128;
System.out.println(xx == yy);
true
==========
false
我们查看一下之前的 valueOf 源码
有个 [-128, 127] 这样的一个数据范围
我们查看 low
自此我们就发现了 为什么127为true而128为false的根本原因
catch数组的取值范围
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
解释
- 首先看传入进来的值是否在 catch 数组区间内
- 如果在区间,则返回catch数组中的值 catch[index] , 值和值用 "=="比较当然会 true
- 如果不在 catch 数组区间, 则返回一个 new对象, 在用 "==" 比较, 就是比较的引用地址,结果当然是不相等为 false
反思:catch缓存数组有何作用?
提高效率的.实例化对象, 是需要消耗资源的.
看视频: 在线观看一边看一边缓存,提高看视频的流畅度



