JAVA基础 装箱类型

java 装箱类型总结

  1. 概述
    在java中有这8种基本类型:char、byte、short、int、long、float、double、boolean,但它们没有属性与方法,为了解决了这个问题,包装类应运而生,8中基本类型各自有着对应的包装类。
基本类型包装类
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
  1. 装箱以及拆箱
    所谓装箱就是把基本类型变成包装类,而拆箱则正好相反,是把包装类变为基本类型。
    例如:
Integer a = 10;//装箱

在这段代码中,系统自动调用的是Integer的valueOf(int)方法,将基本类型int转为了对应的包装类Integer,这是隐式装箱。有兴趣的同学可以通过反汇编编译生成的字节码文件.class进行验证。
当然,除了这种最基本的装箱方式外,还可以通过强制类型转换以及动态创建new进行装箱。

Integer a = (Integer)10;//通过强制类型转换进行装箱
Integer a = new Integer(10);//在堆上创建对象

需要注意的是Integer的valueOf(int)方法,它判断变量是否在 IntegerCache 的最小值(-128)和最大值(127)之间,如果在,则返回常量池中的内容,否则 new 一个 Integer 对象。因此,在进行比较操作时需要留意。

拆箱过程是通过调用包装器的 xxxValue方法实现的(xxx代表对应的基本数据类型),例如:

Integer a = 10;//装箱
int b = a;//拆箱  intValue()方法
int c = (int)a;//显式拆箱

而对于拆箱同样拥有值得让人注意的地方:

Integer a = new Integer(5);
Integer a = new Integer(5);
Integer a = new Integer(10);
System.out.println( a == b );//false
System.out.println( c == a + b );//true

a、b都是通过关键字new在堆上创建的对象,所以a==b为false。但由于a和b是 Integer 对象,是不能使用+运算符的。所以a 和b 会进行自动拆箱操作,拆箱成int后再进行数值加法运算。而c因为要与拆箱后的a+b进行比较,也会进行拆箱,因此c拆箱后再与之比较。所以 c == a+c 其实是比较的 int 型数值是否相等,所以为true。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值