现在我们来学习一下如何在基本类型与包装类之间相互转换。
当我们需要将基本类型转换为包装类时,我们可以调用包装类的一个静态方法valueOf():
Integer i = Integer.valueOf(1);
Double d = Double.valueOf(1.1):
当我们需要将包装类转换为基本类型时,我们可以使用包装类的方法xxxValue()方法(这里不同的包装类方法名不完全一致,但都是以Value结尾):
Integer i =newInteger(1);
int n = i.intValue();
Double d =newDouble(1.1);
double dn = d.doubleValue();
虽然我们可以通过上述的方法在基本类型与包装类之间相互转换。但是在实际编写代码时相对还是比较麻烦的。java在1.5版本后推出了一个新的特性:自动拆装箱。
一下代码在java1.4时编译不通过,但是在java1.5之后可以:
int i =newInteger(1);//可以自动将包装类转换为基本类型 自动拆箱
Integer in=1;//可以自动将基本类型转换为包装类 自动装箱
2.2.2. 自动装箱和拆箱的原理
通过上一节我们知道了如何在基本类型与包装类之间相互转换,也知道了java的自动拆装箱特性。那么java是如何实现的自动拆装箱呢?
事实上JVM不支持该特性,自动拆装箱只是编译器在编译过程中的"预处理"操作。编译器在看到需要在包装类与基本类型之间转换时,会在编译为字节码时进行改变:
源代码中 编译后的字节码中
Integer a = 100 =< Integer a = Integer.valueOf(100);
Integer b = 200 =< Integer b = Integer.valueOf(200);
Integer c = a+b =< Integer c = Integer.valueOf (a.intValue( ) + b.intValue( ));
double d = c =< double d = c . doubleValue( );