美文网首页
重学Java之基础部分——自动拆箱与装箱的秘密

重学Java之基础部分——自动拆箱与装箱的秘密

作者: LovelyLM | 来源:发表于2020-06-01 20:46 被阅读0次

    本系列是“重学Java”,其中有些过于基础部分可能会一笔带过,本系列主要作用在于提取重要及精华。

    首先,Java是一门面向对象的语言,一切皆为对象。不过,凡是都有特例。。。

    Java两大数据类型:

    1. 内置数据类型(基本数据类型)

    2. 引用数据类型(对象)


    基本数据类型

    Java语言提供了八种基本数据类型,其中包括四种整型(byte、short、int、long),两种浮点型(float、double),布尔类型(boolean)和字符型(char)。详细见下图:

    引用数据类型

    也就是常说的对象。引用类型通常由变量指向对象的内存地址,并且所有对象默认值都为null。

    引用类型在被创建时,首先要给其引用(变量)在栈分配一块内存,而对象的具体信息都存储在堆中,然后将引用指向对象。

    自动拆箱与自动装箱

    每一种基本类型都对应其引用类型,并且可以相互转换,这些转换的过程,就叫做拆箱与装箱。在jdk5之前,必须自己手动进行操作,比如Integer value = new Integer(10); //或者这样做 Integer value = Integer.valueOf(10);而在jdk5之后,你可以直接这样定义:Integer value = new Integer(10); int i = value;其中转换的过程由编译器帮你完成了,在虚拟机实际执行的代码中,还是有拆箱与装箱这一过程

    简易实现

    在八种包装类型中,都提供了两种种方法来直接转换:

    静态方法valueOf(基本类型):将基本类型直接转换为对应的包装类型(此转换过程中也会涉及数据类型的自动转换)

    实例方法xxxValue():将具体的包装类型对象转换成基本类型,此方法可以实现6种任意数字类型的强制转换。

    自动装箱与拆箱中的“坑”

    自动拆箱与自动装箱存在复用情况,总结如下:

    (1)Integer默认复用了[-128,127]这些对象,其中高位置可以修改;

    (2)Byte复用了全部256个对象[-128,127];

    (3)Short服用了[-128,127]这些对象;

    (4)Long服用了[-128,127];

    (5)Character复用了[0,127],Charater不能表示负数;

    Double和Float是连续不可数的,所以没法复用对象,也就不存在自动装箱复用陷阱。

    相关文章

      网友评论

          本文标题:重学Java之基础部分——自动拆箱与装箱的秘密

          本文链接:https://www.haomeiwen.com/subject/rueqyftx.html