包装类
- 包装类是用来解决基本类型不能直接参与面向对象开发的问题。使得基本类型可以以“对象”的形式存在
- 基本类型转换成包装类:
// 基本类型转换成包装类
//Integer i1 = new Integer(1);
//Integer i2 = new Integer(1);
//== false(每new一次就创建了一个新的地址); equals()方法 true(java内部的方法都重写了equals方法)
//这种方法一般不用
//java推荐用valueOf转换
//Integer i1 = Integer.valueOf(1);
//Integer i2 = Integer.valueOf(1);
//== true; equals()方法 true
Integer i1 = Integer.valueOf(128);
Integer i2 = Integer.valueOf(128);
//== false(超出范围就不是同一个地址了); equals()方法 true
//This method will always cache values in the range -128 to 127(-128到127存储的是同一个地址)
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
- 包装类转换为基本类型
Double d1 = Double.valueOf(13.4); //包装类 如果此处是128.0
double d = d1.doubleValue(); //包装类转换成基本类型
System.out.println(d); //13.4 //128.0
int i = d1.intValue();
System.out.println(i); //13 //128
byte b = d1.byteValue();
System.out.println(b); //13 //-128 此处byte超出范围溢出
- 包装类常用功能
- 获取最大值最小值
// 获取int最大值
int imax = Integer.MAX_VALUE;
System.out.println(imax); //2147483647
// 获取int最小值
int imin = Integer.MIN_VALUE;
System.out.println(imin); //-2147483648
long lmax = Long.MAX_VALUE;
System.out.println(lmax); //9223372036854775807
long lmin = Long.MIN_VALUE;
System.out.println(lmin); //-9223372036854775808
- 包装类可以将字符串解析为基本类型,前提是该字符串描述了基本类型可以保存的值
//字符串转数字
String str = "123"; //如果此处是123.0 //如果是"a"
int i = Integer.parseInt(str);
System.out.println(i); //123 //123.0不是int,所以报错 //"a"不是int,所以报错
double d = Double.parseDouble(str);
System.out.println(d); //123.0 //123.0 //"a"不是double,所以报错
- 包装类的自动拆装箱功能jdk1.5推出的(包装类跟基本类型间可直接相互转换(编译器给你自动转换好了))
int a = 1;
//触发了编译器的自动装箱特性,下面的代码会被编译器改为:Integer i = Integer.valueOf(i);
Integer i = a;
//触发自动拆箱特性: a = i.intValue();
a = i;
简述自动装箱和拆箱的原理
原理描述:
-
从jdk1.5开始,编译器提供了自动装箱和自动拆箱机制,编译器在生成类的字节码时,插入必要的方法来完成
-
自动装箱的原理为:Integer a = 100;
编译器在编译的过程中的代码实现为:Integer a = Integer.valueOf(100);
自动装箱时,调用了Integer的valueOf方法将int类型的值100转换成了Integer类型 -
自动拆箱的原理为:int c = a;
编译器在编译过程中的代码实现为:int c = a.intValue();
自动拆箱时,调用了Integer的intValue方法,将Integer类型的变量转换成了int类型