文章目录
- 概述
- Boolean 与 boolean
- Character 与 char
- Byte 与 byte
- Short 与 short
- Integer 与 int
- Float 与 float
- Double 与 double
- Long 与 long
- 总结
概述
基本类型与包装类型,存在相互转化的关系。
- 基本类型转为包装类型这个过程,被称之为装箱
- 包装类型转为基本类型这个过程,被称之为拆箱
Boolean 与 boolean
- 装箱操作通过
Boolean.valueOf()来完成 - 拆箱操作通过
Boolean.booleanValue()来完成
注意,Boolean 只有两个取值,所以通过装箱操作得到的值,都是 Boolean 中的静态变量 TRUE 或者 FALSE。
Character 与 char
- 装箱操作通过
Character.valueOf()来完成 - 拆箱操作通过
Character.charValue()来完成
注意,Character 中存在一个内部缓存类 CharacterCache,缓存范围是 Ascii 码小于 127 的所有字符,即包含了所有的英文字母与半角符号。示例如下:
Character c = '@';
Character c1 = '@';
//因为有缓存,输出 true
System.out.println(c == c1);
Character c2 = '二';
Character c3 = '二';
//中文字符不在缓存范围内,所以输出 false
System.out.println(c2 == c3);
Byte 与 byte
- 装箱操作通过
Byte.valueOf()来完成 - 拆箱操作通过
Byte.byteValue()来完成
注意,Byte 类中存在一个内部缓存类 ByteCache,缓存范围正好是 byte 类型的取值范围: -128~127。当遇到装箱操作时,将自动从此内部缓存类中获取,示例如下:
Byte b = 10;
Byte b2 = 10;
//因为有缓存,所以这里输出 true
System.out.println(b == b2);
Short 与 short
- 装箱操作通过
Short.valueOf()来完成 - 拆箱操作通过
Short.shortValue()来完成
与 Byte 类似,Short 类中也存在内部缓存类 ShortCache,缓存范围也是 -128~127。当遇到此缓存范围中的装箱操作时,将自动从此内部缓存类中获取,示例如下:
Short s0 = 127;
Short s1 = 127;
//因为有缓存,所以这里输出 true
System.out.println(s0 == s1);
Short s2 = 128;
Short s3 = 128;
//这里超出了缓存范围,所以都去创建了新的对象,故输出 false
System.out.println(s2 == s3);
Integer 与 int
- 装箱操作通过
Integer.valueOf()来完成 - 拆箱操作通过
Integer.intValue()来完成
注意,Integer 中也存在内部缓存类,用法也与上面类似,但不同的是,Integer 的缓存范围可以自定义,通过指定参数来进行设置。
Float 与 float
- 装箱操作通过
Float.valueOf()来完成 - 拆箱操作通过
Float.floatValue()来完成
Double 与 double
- 装箱操作通过
Double.valueOf()来完成 - 拆箱操作通过
Double.doubleValue()来完成
Long 与 long
- 装箱操作通过
Long.valueOf()来完成 - 拆箱操作通过
Long.longValue()来完成
注意,Long 中也存在内部缓存类,用法与 Byte 类似。
总结
- 装箱操作,一般都是调用包装类的
valueOf()方法来实现的,例如Double.valueOf() - 拆箱操作,一般都是调用包装类的
xxxVluae()方法来实现的,例如Long.longValue() Boolean、Character、Byte、Short、Integer、Long类型内部都有缓存机制来对一定范围内的值进行缓存操作Boolean类通过TRUE和FALSE两个静态变量来实现装箱时的缓存读取操作Character、Byte、Short、Integer、Long都是通过内部的缓存类来实现装箱时的缓存读取操作的Character的缓存范围是Ascii码小于 127 的字符Byte、Short、Integer、Long的缓存范围都是-128~127Integer可以通过修改指定参数来修改缓存范围