包装类
8个基本类型都有对应的包装类型,以方便基本类型也能继承Object类,以方便使用。
类型转换
自动拆箱和自动装箱
JDK 1.5以后提供了自动装箱和自动拆箱。
Integer x = 2; // 装箱
int y = x; // 拆箱
由于
自动装箱
,在需要Integer对象类型的参数时,填入int类型的参数会自动装箱为Integer类型;
由于自动拆箱
,在需要int类型的参数时,填入Integer对象的参数会自动拆箱为int类型。
基本类型、包装类、String类型之间的转换
函数类型 | 构造函数 | valueOf | toString | xxxValue | parseXxx |
---|---|---|---|---|---|
所属类 | 包装类&String | 包装类&String | 包装类&String | 包装类 | 包装类 |
参数类型 | 基本类型;char[],byte[],int,StringBuilder | 基本类型;Object | 基本类型,空;空 | 空 | String类 |
返回值类型 | 得到本类型 | 得到本类型 | 得到String类 | 得到基本类型 | 得到基本类型 |
由上表可知:
1、构造函数和valueOf都是包装类或String类到本类的转换
2、toString()为了得到String类型
3、只有包装类的函数可以直接得到基本类型,xxxValue()和parseXxxx()分别实现包装类的String类向基本类型的转换
4、包装类的valueOf()调用了自己的构造函数
String的valueOf()调用包装类的toString();(避免了异常)
所以本质上,得到包装类和String类就是根据包装类的构造函数
和String类的toString()
比较操作
- 包装类引用和基本类型比较
Integer a = new Integer(6);
System.out.println(a>5.0); //输出true
- 包装类引用间比较
包装类实际上是引用类型,只有两个包装类引用指向同一个对象时才会返回true,如:
Integer a = 128;
Integer b = 128;
System.out.println(a==b); //输出false
但是,Integer内有一个cache缓存数组,缓存了-128127之间的整数。如果把-128127之间的整数自动装箱成Integer,实际上是直接指向cache数组中同一个元素。所以:
Integer a =2;
Integer b = 2;
System.out.println(a==b); //输出true
- 两个基本类型的比较
包装类都提供的对应基本类型的比较函数:compare(基本类型1,基本类型2),如:
System.out.println(Boolean,compare(true,false)); //输出1
System.out.println(Boolean,compare(true,true)); //输出0
System.out.println(Boolean,compare(false,true)); //输出-1
参考文献
https://blog.csdn.net/u013453970/article/details/47414553 包装类