包装类
-
包装类就是把基本类型的数据包装成对象的类型。就比如将int类型的数据包装成类似于String这种可以实例化为对象,内部有成员变量成员方法的类型
-
包装类型因为相当于一个拥有成员变量,成员方法的类,创建为对象后还有引用指针等对对象进行管理,所以理论上,包装类型相比基本类型性能更差 public static Integer valueOf(int i)
-
基本类型的数据包装成对象的方案
基本类型的数据包装成对象的方案 public Integer(int value):已过时 public static Integer valueOf(int i) //new Integer(a);//已过时,不建议使用 Integer.valueOf(a) //推荐 int a = 1; Integer b = Integer.valueOf(a); double d1 = 3.14; Double d2 = Double.valueOf(d1); -
自动装箱: 基本数据类型可以自动转换为包装类型。
-
自动拆箱: 包装类型可以自动转换为基本数据类型。
// 把基本数据类型变成包装类对象。Java支持自动装箱:基本类型的数据可以直接变成包装类型的对象。
int i1 = 100;
Integer i2 = i1;
// 把包装类对象变成基本数据类型。Java支持自动拆箱:包装类对象可以直接变成基本数据类型。
int i7 = i2;
-
包装类具备的其他功能:
- 可以把基本类型的数据转换成字符串类型。
// 把基本数据类型变成字符串。Integer.toString(基本类型) Integer i2 = 3; i2.toString(); Double d3 = 3.14; d3.toString(); Boolean b1 = Boolean.TRUE; b1.toString();- 可以把字符串类型的数值转换成数值本身对应的真实数据类型
// - 把字符串的数值变成基本数据类型。Integer.parseInt(字符串数字) int i = Integer.parseInt("1"); double v = Double.parseDouble("3.14"); - 可以把基本类型的数据转换成字符串类型。
-
剖析包装类型Integer源码,可以ctrl+左键,进入到Integer的源码中的valueOf方法,这个方法是将基本数据类型装箱为包装数据类的
- 可以看到当值在-128到127之间的时候,java会直接到缓存中取数据,相同的值,引用同一块数据地址,当不在这个范围内,java则会在新内存中创建数据并引用
//面试题 Integer i3 = 100;//从缓存池中获取,内存地址固定 Integer i4 = 100;//从缓存池中获取,内存地址固定 System.out.println(i3 == i4);//true,因为内存地址一样 Integer i5 = 200;//创建新的对象,拥有新的内存地址 Integer i6 = 200;//创建新的对象,拥有新的内存地址 System.out.println(i5 == i6);//false,内存地址不一样 //java为了提升操作数字的性能,将-128~127缓存到缓存池中, //如果数字在这个范围内直接从缓存池中获取 - 可以看到当值在-128到127之间的时候,java会直接到缓存中取数据,相同的值,引用同一块数据地址,当不在这个范围内,java则会在新内存中创建数据并引用