当前位置 博文首页 > young_YangY的博客:Java基本数据类型的大小,他们的封装类以及
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文章中的一个表格来介绍一下九种数据结构的大小,默认值和封装类。
基本类型 | 大小(字节) | 默认值 | 封装类 |
byte | 1 | (byte)0 | Byte |
short | 2 | (short)0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
boolean | - | false | Boolean |
char | 2 | \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();