包装类:java定义了8个包装类,目的是为了解决基本类型不能 直接参与面向对象开发 的问题,使得基本类型可以通过包装类的实例以对象的形式存在。其中数字类型的包装类都继承自java.lang.Number而char和 boolean的包装类直接继承自Object,Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型。 基本类型转换为包装类 。java推荐我们使用包装类的静态方法valueOf将其基本类型转换为包装类,而不是直接new
int i =123;
Integer i1 = Integer.valueOf(i); valueOf方法 底层就是 return new Integer(i)
Integer i2 = Integer.valueOf(i);
//Integer会重用-128~127之间的整数,如果超范围了就会new创建一个Integer实例
//所以-128~127 之间的整数 == 和 equals都是true ,地址都是一样的
//而超了这个范围就没有缓存值了,地址就不一样了
//可以理解为有一个常量池,超过了这个范围就就new,在这个范围就直接给地址
System.out.println(i1 == i2); //true
System.out.println(i1.equals(i2)); //true
double dou = 123.123;
Double d1 = Double.valueOf(dou); //Double则是直接new,没有常量池了
Double d2 = Double.valueOf(dou);
System.out.println(d1 == d2); //false,地址不一样
System.out.println(d1.equals(d2)); //true,内容一样
//包装类转换为基本类型
int in = i1.intValue(); //获取包装类对象中表示的基本类型
double doub = i1.doubleValue();
System.out.println(in); //123
System.out.println(doub); //123.0
in = d1.intValue();
doub = d1.doubleValue();
System.out.println(in); //123
System.out.println(doub); //123.123
包装类常用功能:
可以通过包装类来获取获取其表示的基本类型的取值范围,获取int的最大最小值 字符串转基本类型
public static void main(String[] args) {
int imax = Integer.MAX_VALUE;
System.out.println(imax);
int imin = Integer.MIN_VALUE;
System.out.println(imin);
/**
* 字符串转基本类型:
* 字符串转换为基本类型的前提是该字符串正确描述了基本类型可以保存的值,否则
* 会抛出异常NumberFormatException: 数字格式异常
*/
String str = "123";
//String str = "123.123"; 这个字符串不能解析为int值,包括 "a"也不能解析为97
int d = Integer.parseInt(str); //字符串转int
System.out.println(d); //123
double dou = Double.parseDouble(str); //字符串转double
System.out.println(dou); //123.0
}
自动拆装箱: JDK1.5后推出的新特性,该特性是编译器认可的,当编译器编译源代码的时候,发现有基本类型和引用类型相互赋值时,会自动补充代码来完成他们的转换工作,这个过程称为:自动拆装箱
public static void main(String[] args) {
/**
* jdk1.5开始 java 可以自动拆包箱 编译器会自动补代码,JVM不会支持
* 触发自动拆箱特性,编译器会补充代码将包装类转换为基本类型,
* int i = new Integer(123).intValue()
*/
int i = new Integer(123);
/**
* 编译器触发装箱特性,
* Integer in = Integer.valueOf(123);
*/
Integer in = 213;
}