九种基本数据类型的大小以及封装类
文章目录
基本数据类型字节大小:
基本类型 | 大小(字节) | 默认值 | 封装类 |
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 |
一个字节是8位,一个汉字编码两个字节是十六位。
为什么Java会这么做?
在java中使用基本类型来存储语言支持的基本数据类型,这里没有采用对象,而是使用了传统的面向过程语言所采用的基本类在型,主要是从性能方面来考虑的:因为即使最简单的数学计算,使用对象来处理也会引起一些开销,而这些开销对于数学计算本来是毫无必要的。但是在java中,泛型类包括预定义的集合,使用的参数都是对象类型,无法直接使用这些基本数据类型,所以java又提供了这些基本类型的包装器。
基本数据类型与其对应的封装类由于本质的不同,具有一些区别:
· 基本数据类型只能按值传递,而封装类按引用传递。
· 基本类型在堆栈中创建;而对于对象类型,对象在堆中创建,对象的引用在堆栈中创建。基本类型由于在堆栈中,效率会比较高,但是可能会存在内存泄漏的问题。
· 堆中分配空间所需的时间远大于从栈中分配存储空间,所以JAVA速度比C 慢
基本类型所占的存储空间是不变的:这种不变性也是java具有可移植性的原因之一。基本类型是放在栈中,直接存储值。所有数值类型都有正负号,没有无符号的数值类型。
注:
1.int是基本数据类型,Integer是int的封装类,是引用类型。int默认值是0,而Integer默认值是null,所以Integer能区分出0和null的情况。一旦java看到null,就知道这个引用还没有指向某个对象,再任何引用使用前,必须为其指定一个对象,否则会报错。
2.基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值
布尔类型包装器: Boolean 是封装布尔值的包装器。它定义了下面的的构造方法:
Boolean (boolean boolValue);//boolValue 的值必须是true或false;
Boolean (String boolString);//boolString 的值为“true”,那么创建的布尔对象为true,否则为false;
为了获得Booolean 对象中的布尔值,可以使用booleanValue()方法;
boolean占多少字节呢?
虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。
数字类型包装器:
所有数字类型的包装器都是从抽象类Number 继承下来的。Number 声明了多种以不同的数字格式返回一个对象值的方法:
byte byteValue( );
int intValue();.........................
所有的数字类型包装器都提供了一个静态的方法,可以将字符串 转换为自己所封装的数据类型;例如:
static int parseInt(String s );