Java当中的包装类、装箱和拆箱

0x01 包装类

对基本数据类型进行包装,把基本数据类型包装一个对象,从而获取更加强大的功能

基本数据类型包装类
byteByte
shortShort
intInteger(内部覆盖到了toString方法,所以打印出来的不是地址而是具体的值)
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

0x02 装箱操作

1
2
Integer num1 = new Integer(10);      //方法一
Integer num2 = Integer.valueOf(10);//方法二

在类中,成员变量一般使用包装类,在方法中一般使用基本数据类型。
方法中,基本数据类型存储来栈中,而包装类存储在堆中。

0x03 拆箱操作

把包装类转回基本数据类型

1
2
Integer num = new Integer(10);    //装箱
int num2 = num.intValue(); //拆箱

类似的还有doubleValue()、longValue()等等

0x04 自动装箱与自动拆箱

  • 自动装箱
    可以直接把一个基本数据类型的值赋值给包装类对象

    1
    Integer num = 20;
  • 自动拆箱
    可以直接把一个包装类对象赋值给基本数据类型的变量

    1
    int num = Integer.valueOf(10);

0x05 包装类valueOf的缓存设计

以Integer为例子,如果数值在-128到127之间(不同的包装类数值不同),会使用缓存机制,直接从之前创建的地方获取,超出这个范围则不实用缓存,直接创建新的地址。

本文标题:Java当中的包装类、装箱和拆箱

文章作者:Pino-HD

发布时间:2018年05月30日 - 22:05

最后更新:2018年05月30日 - 22:05

原始链接:https://pino-hd.github.io/2018/05/30/Java当中的包装类、装箱和拆箱/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!