【Java】基本数据类型和包装类

基本数据类型

  • 布尔型:boolean
  • 整数型:byte(8)、short(16)、int(32)、long(64)
  • 浮点型:float(32)、double(64)
  • 字符型:char(16)
数据类型代表含义默认值取值包装类大小(位)
boolean布尔型falsetrue/falseBoolean-
byte字节型(byte)0-127~128Byte8
char字符型‘\u0000’(空)‘\u0000’~’\uFFFF’Character16
short短整数型(short)0-215~21516
int整数型0-231~231-1Integer32
long长整数型0L-263~262-1Long64
float单浮点型0.0f1.4e-45~3.4e+38Float32
double双浮点型0.0d4.9e-324~1.798e+308Double64

包装类

Java的设计思想是万物皆对象,而将基本数据类型包装成类,我们就可以以对象的形式操作某项功能。

包装类特性

功能丰富

在将基本数据类型包装成类的同时,可以在类中添加一些诸如MAX_VALUEMIN_VALUE等属性,以及hashCodegetClass等方法,这些经常使用的属性和方法与基本数据类型一同被封装成包装类,从而拥有更加丰富的功能。

可定义泛型类型参数

包装类可以定义泛型,而基本类型不行。

序列化

包装类都实现了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的默认值是0Integer的默认值是null
  • 由于高频区间的存在,因此包装类对象之间的值的比较推荐使用equals()方法。
  • FloatDouble不会有缓存,其他包装类都有缓存。
  • Integer是唯一一个可以修改缓存范围的包装类,方法是在VM options加入参数。例如:-XX:AutoBoxCacheMax=666,即修改缓存最大值为666.

版权声明:本文为qq_40801005原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。