相关推荐
联系我们/Contact
包装用品主页 > 包装用品 >

深刻浅出 Java 中的包装类

文章作者:  发布日期:2019-10-16 21:41

  前阵子,我们分享了《Java中的基本数据类型转换》这篇文章,对许多粉丝还是有带来帮助的,今天讲一下 Java 包装类的的由来,及自动装箱、拆箱的概念和原理。

  Java 设计当初就提供了 8 种 基本数据类型及对应的 8 种包装数据类型。我们知道 Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。

深刻浅出 Java 中的包装类

  基本数据类型的成员变量都有默认值,如以上代码 status 默认值为 0,如果定义中 0 代表失败,那样就会有问题,这样只能使用包装类 Integer,它的默认值为 null,所以就不会有默认值影响。

  看以上代码,方法参数定义的是基本数据类型 int,所以必须得传一个数字过来,不能传 null,很多场合我们希望是能传递 null 的,所以这种场合用包装类比较合适。

  还有更多应用场景就不一一例举了,欢迎留言共同探讨包装类的更多的应用场景。

  Java 5 增加了自动装箱、拆箱机制,提供基本数据类型和包装类型的相互转换操作。

  自动装箱即自动将基本数据类型转换成包装类型,在 Java 5 之前,要将基本数据类型转换成包装类型只能这样做,看下面的代码。

  以上 3 种都可以进行转换,但在 Java 5 之前第 3 种方法是编译失败的,第 3 种方法也正是现在的自动装箱功能。另外,第一种构造器方法也不推荐使用了,已经标为废弃了。

  其实自动装箱的原理就是调用包装类的 valueOf 方法,如第 2 个方法中的 Integer.valueOf 方法。

  自动拆箱即自动将包装类型转换成基本数据类型,与自动装箱相反,有装就有拆,很好理解。

  继续上面的例子,把 i3 赋值给 i4 就是实现的自动拆箱功能,自动装箱的原理就是调用包装类的 xxValue 方法,如 i5 中的 Integer 的 intValue 方法。

  自动装箱、拆箱不只是体现在以上的例子,在方法接收参数、对象设置参数时都能自动装箱拆箱。

  需要注意的是,关于 Integer,-128 ~ 127 会有缓存,对比这个范围的值的对象是一个坑,这个在阿里巴巴规范中也有提及。详细请参考《IntegerCache的妙用和陷阱》这篇文章。


Copyright © 江苏体彩网-体育彩票管理中心唯一官方网站 版权所有.

备案号:Copyright © 2002-2017 DEDECMS. 织梦科技 版权所有 Tag标签网站地图 家电维修|北京赛车pk10