包装类型与基本类型的装箱与拆箱操作

概述

基本类型与包装类型,存在相互转化的关系。

  • 基本类型转为包装类型这个过程,被称之为装箱
  • 包装类型转为基本类型这个过程,被称之为拆箱

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()
  • BooleanCharacterByteShortIntegerLong 类型内部都有缓存机制来对一定范围内的值进行缓存操作
    • Boolean 类通过 TRUEFALSE 两个静态变量来实现装箱时的缓存读取操作
    • CharacterByteShortIntegerLong 都是通过内部的缓存类来实现装箱时的缓存读取操作的
    • Character 的缓存范围是 Ascii 码小于 127 的字符
    • ByteShortIntegerLong 的缓存范围都是 -128~127
    • Integer 可以通过修改指定参数来修改缓存范围
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值