1、java数据类型
在java语言中,数据类型包括基本数据类型和引用数据类型。基本的数据类型包括整型(byte、short、int、long,分别占1、2、4、8个字节)、浮点型(float、double,分别占4、8个字节)、char(2字节)和boolean类型。引用数据类型包括类、数组、接口、String字符串等。
2、基本数据类型对应的包装类
基本数据类型对应的包装类依次为:Byte Short Int Long Float Double Character Boolean。他们实现共同的抽象类Number,该抽象类内定义的抽象方法如下图所示。各包装类实现抽象方法,通过调用对应的方法xxxValue(),可将当前的的包装类转换为相应的基本数据类型。
下面将以Double类中intValue()为例描述实现方式。首先Double类中定义了变量value存储数据,且该变量是不可变的。
创建Double对象(new Double(,,,)),此时构造器自动将传递的数值存储到value变量中。
当Double类对象调用intValue()方法时,执行如下逻辑,将value强制类型转换为对应的数据类型。由上面的运行结果可知,浮点型向整型数据转换时存在精度缺失,即只保留整数部分的数值(截断)。
此外,各包装类均定义为final类,该类不被继承。
3、各包装类和String之间的转换
String-->Double包装类
- 可直接调用Double包装类的构造器,参数传递String字符串。构造器内调用parseDouble(String)方法将字符串转换为double类型存储到value变量中。
- 先调用包装类的parseDouble(String)方法,将string字符串转换为double数据类型,再调用Double包装类的构造器传递转换后的double类型数据。
Double包装类-->String
通过调用String类的valueOf(基本数据类型)方法实现。该方法调用对应包装类的toString()方法。包装类内部都定义toString(基本数据类型)方法,将包装类对象转换为String对象。下面以Double类为例展示代码实现。
4、自动装箱和自动拆箱
是基本数据类型和对应包装类之间的直接转换机制。
将基本数据类型赋值给对应包装类的过程体现自动装箱。
将对应包装类赋值给基本数据类型的过程体现自动装箱。
5、包装类中的常量池技术
在介绍完自动装箱/拆箱技术之后,可以看出包装类对象的定义分为两种方式,即通过字面量方式和关键字new创建新对象。其中Byte Short Integer Long([-128,127]) 和Character([0.127])实现常量池技术,在区间内使用字面量方式赋值时可直接从常量池中取值,不产生新的对象。
当数据超过[-128,127]区间范围时,常量池技术失效。