基本数据类型
- 布尔型:boolean
- 整数型:byte(8)、short(16)、int(32)、long(64)
- 浮点型:float(32)、double(64)
- 字符型:char(16)
| 数据类型 | 代表含义 | 默认值 | 取值 | 包装类 | 大小(位) |
|---|---|---|---|---|---|
| boolean | 布尔型 | false | true/false | Boolean | - |
| byte | 字节型 | (byte)0 | -127~128 | Byte | 8 |
| char | 字符型 | ‘\u0000’(空) | ‘\u0000’~’\uFFFF’ | Character | 16 |
| short | 短整数型 | (short)0 | -215~215 | 16 | |
| int | 整数型 | 0 | -231~231-1 | Integer | 32 |
| long | 长整数型 | 0L | -263~262-1 | Long | 64 |
| float | 单浮点型 | 0.0f | 1.4e-45~3.4e+38 | Float | 32 |
| double | 双浮点型 | 0.0d | 4.9e-324~1.798e+308 | Double | 64 |
包装类
Java的设计思想是万物皆对象,而将基本数据类型包装成类,我们就可以以对象的形式操作某项功能。
包装类特性
功能丰富
在将基本数据类型包装成类的同时,可以在类中添加一些诸如MAX_VALUE、MIN_VALUE等属性,以及hashCode、getClass等方法,这些经常使用的属性和方法与基本数据类型一同被封装成包装类,从而拥有更加丰富的功能。
可定义泛型类型参数
包装类可以定义泛型,而基本类型不行。
序列化
包装类都实现了Serializable接口,因此支持序列化和反序列化。
序列化:把对象转换为字节序列的过程。
反序列化:把字节序列恢复为对象的过程。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中(持久化对象)
2) 在网络上传送对象的字节序列(网络传输对象)
类型转换
包装类提供了类型转换的方法,可以很方便的实现类型之间的转换。
例如:使用Integer.parseInt(string)可以将String类型转换为int类型
高频区间的数据缓存
在包装类的高频区域的取值范围内,会直接复用已有对象,在这区间之外的值才会在堆上产生。
| 包装类 | 高频区域 |
|---|---|
| Boolean | 使用静态final定义,就会返回静态值 |
| Byte | 缓存区 -128~127 |
| Short | 缓存区 -128~127 |
| Character | 缓存区 0~127 |
| Long | 缓存区 -128~127 |
| Integer | 缓存区 -128~127 |
public static void main(String[] args) {
Integer num1 = 127;
Integer num2 = 127;
System.out.println(num1 == num2); // true
Integer num3 = 128;
Integer num4 = 128;
System.out.println(num3 == num4); // false
}
注意事项
int的默认值是0,Integer的默认值是null。- 由于高频区间的存在,因此包装类对象之间的值的比较推荐使用
equals()方法。 Float和Double不会有缓存,其他包装类都有缓存。Integer是唯一一个可以修改缓存范围的包装类,方法是在VM options加入参数。例如:-XX:AutoBoxCacheMax=666,即修改缓存最大值为666.
版权声明:本文为qq_40801005原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。