当前位置 博文首页 > young_YangY的博客:Java基本数据类型的大小,他们的封装类以及

    young_YangY的博客:Java基本数据类型的大小,他们的封装类以及

    作者:[db:作者] 时间:2021-07-19 19:29

    Java提供了一套基本数据类型,总共有八种,也会有人说是有九种。

    在我们的印象中,很多人可能会说出byte,short,int,long,float,double,boolean,char这八种数据类型。

    那么还有一种是哪种呢,它到底是不是数据类型呢?

    我们很容易忽略一个void,有人说void也是数据类型之一,也有人说不是。

    在Java的API中,并未说明void是基本数据类型,那为什么Java圣经“Think in Java”还有一些书籍会说void是一种基本数据类型呢?

    众所周知,Java的数据类型分两种,一种是基本数据类型,一种是引用类型。两者的本质区别是:基本类型是在堆栈处分配空间存“值”,但是引用类型,是在堆里面分配空间存“值”。Void是不能new出来的,也就是不能在堆里面分配空间存值,那就是一开始就在堆栈处分配好空间了。所以,将void归于基本数据类型,也有道理。

    所以加上前面八种数据类型,java总共为我们提供了九种数据类型。

    下面我引用了rabbit_in_android文章中的一个表格来介绍一下九种数据结构的大小,默认值和封装类。

    基本类型大小(字节)默认值封装类
    byte1(byte)0Byte
    short2(short)0Short
    int40Integer
    long80LLong
    float40.0fFloat
    double80.0dDouble
    boolean-falseBoolean
    char2\u0000(null)Character
    void--Void










    那么为什么Java又会有基本类型的封装类呢,为什么要这样做?

    用基本数据类型的好处是:在java中使用基本类型来存储语言支持的基本数据类型,这里没有采用对象,而是使用了传统的面向过程语言所采用的基本类型,主要是从性能方面来考虑的:因为即使最简单的数学计算,使用对象来处理也会引起一些开销,而这些开销对于数学计算本来是毫无必要的。

    封装类:在java中,泛型类包括预定义的集合,使用的参数都是对象类型,无法直接使用这些基本数据类型,所以java又提供了这些基本类型的包装器。如List<Integer>是一个整形的List集合,不能这样子写List<int>。


    自动装箱:当我们创建一个Integer对象的时候,可以这样

    Integer i = 100;
    //注意,不是i = 100
    实际上,执行上面那句代码的时候,jvm自动为我们执行了:

    Integer i = Integer.valueOf(100);
    这就是将基本数据类型装箱成为它们的封装类类型。


    自动拆箱:就是将对象中的基本数据从对象中自动取出,如下:

    Integer i = 100;     //自动装箱
    int x = i;      //自动拆箱
    实际上,拆箱操作就是自动执行了int x = i.intValue();

    基本数据类型和封装类的一些区别:

    • 1.基本数据类型只能按值传递,而封装类按引用传递。
    • 2.基本类型在堆栈中创建;而对象类型在堆中创建,对象的引用在堆栈中创建。基本类型由于在堆栈中,效率会比较高,但是可能会存在内存泄漏的问题。
    • 3.int类型的默认值是0,而Integer的默认值是null。

    cs