一、引入
- 目的:让 Object统一管理所有类型的数据。
- 包装类:基本数据类型对应的 对象类型的类 被称为基本
数据类型的包装类。
二、基本 数据类型 对应包装类型
-
包装类都是位于 java.lang中,无需导入包,包装类都被
final修饰,没有子类。 -
对应关系如下:
三、数据类型之间的转换(以Integer为例)基本数据类型 包装类类名 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
三、数据类型之间的转换(以Integer为例)
-
int 和 Integer 之间的转换
(1) int —> Integer [关注]int a = 12; a. Integer i1 = new Integer(a);//利用构造方法System.out.println(i1);//12:Integer类中覆 盖类toString b. Integer i2 = Integer.valueOf(a);//Integer 类中静态方法 (2) Integer -> int int n = i2.intValue();//Integer类中成员方法
-
String 和 Integer之间的转换
(1) String -> Integera.Integer i3 = new Integer("123");//利用构造方法 b.Integer i4 =Integer.valueOf("123");//Integer类静态方法 (2) Integer -> String a.String s1 = i4.toString(); b.String s2 = i4+""; //利用字符串拼接
-
int 和 String 之间的转换
(1) int --> Stringint a2 = 32; String s3 =a2+"";//利用字符串的拼接
(2) String --> int 【开发应用重点】
String a = 18;
int age = Integer.parseInt(a);//Integer类中静 态方法
注意:String转换为 Integer/int时,要求 String中数据必须是纯数值类型,并且不能超过 Integer类型的数据范围,否则编译通过,但是运行报错,错误信息如下:java.lang.NumberFormatException(数值格式转换异常)
四、自动的装箱 和 拆箱
-
JDK5.0版本提供了自动装箱 和 拆箱功能,即:基本数据
类型和对应的包装类型之间可以相互转换。 -
装箱和拆箱
(1) 装箱:将基本数据类型转换为 对应的包装类型Integer i1 = 12;// int ----> Integer
(2) 拆箱:包装类型 转换为 对应的基本数据类型
Integer i1 = 12;
int a = i1; // Integer ---> int
- 自动装箱的原理分析
(1) 自动装箱 时,jvm默认调用 Integer类中的静态方法valueOf(int n),实现对应 int --> Integer之间的转换
(2) 缓冲区的作用:Integer对常用数据段 -128~127进行了预先包装处理,包装的结果存储在 常量池(也称为缓冲区),为了提高 包装的效率,从而也提高jvm内存的空间利用率。
(4) 面试题目:分析以下程序打印输出的结果;
Integer i1 = 12;
Integer i2 = 12; // 从缓冲区中获取 12 的包装结果
System.out.println(i1==i2);// true
Integer i3 = 255;// new Integer(255)
Integer i4 = 255;// new Integer(255);
System.out.println(i3==i4);//false
五、包装类的实际开发应用
- 应用场景:类中属性由 之前的基本数据类型,替换为 对应包装类型
- 应用场景的目的:是为了区分有效数据和无效数据的,例如:0和null;0.0 和 null 等。