目录
- 包装类理解
- 内存层面
- 包装类作用
- 基本数据类型与包装类
- 自动装箱,拆箱
- 字符串转包装类
包装类理解
内存层面
包装类的本质就是创建了一个对象,用一个对象,把基本数据类型给包起来
这张图可以很好的理解包装类是对象,因为它是在堆内存开辟的空间
包装类作用
包装类:是基本数据类型对应的引用类型
废话不多说,它的作用在于
1.由于多态的特性,所有对象都可以用object来接收,但如果是基本数据类型,就无法接收,有局限性
2.集合中的是不能存储基本数类型的,只能存对象,所以要用到包装类
基本数据类型与包装类
下面是基本数据类型各自对应的包装类,区别较大的是char和int,尤其是Integer用的最多
JDK5以前的数据转换,装箱,拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
- 装箱:从基本类型转换为对应的包装类对象。
- 拆箱:从包装类对象转换为对应的基本类型。
int型转换为Integer
int a = 1;
Integer i1 = Integer.valueof(a);
Integer转int型
int b = i1.intValue();
这里有一个问题要注意
//底层原理:
//因为在实际开发中,-128~127之间的数据,用的比较多。
//如果每次使用都是new对象,那么太浪费内存了
//所以,提前把这个范围之内的每一个数据都创建好对象
//如果要用到了不会创建新的,而是返回已经创建好的对象。
Integer i6 = Integer.valueOf(127);
Integer i7 = Integer.valueOf(127);
System.out.println(i6 == i7);//true
Integer i8 = Integer.valueOf(128);
Integer i9 = Integer.valueOf(128);
System.out.println(i8 == i9);//false
建议:获取Integer对象的时候不要自己new,而是采取直接赋值或者静态方法valueOf的方式
因为在实际开发中,-128~127之间的数据,用的比较多。如果每次使用都是new对象,那么太浪费内存了。
所以,提前把这个范围之内的每一个数据都创建好对象,如果要用到了不会创建新的,而是返回已经创建好的对象。
自动装箱,拆箱
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。
字符串转包装类
下面是两种常用的转型
public static int parseInt(String s)
:将字符串参数转换为对应的int基本类型。public static long parseLong(String s)
:将字符串参数转换为对应的long基本类型。
转换方式
- 方式一:先将字符串数字转成Integer,再调用valueOf()方法
- 方式二:通过Integer静态方法parseInt()进行转换
示例代码
public class IntegerDemo {
public static void main(String[] args) {
//String --- int
String s = "100";
//方式1:String --- Integer --- int
Integer i = Integer.valueOf(s);
//public int intValue()
int x = i.intValue();
System.out.println(x);
//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println(y);
}
}