Java基础知识强化66:基本类型包装类之JDK5新特性自动装箱和拆箱

时间:2023-02-10 15:02:22

1. JDK1.5以后,简化了定义方式。

(1)Integer  x = new  Integer(4);可以直接写成如下:

        Integer  x = 4 ;//自动装箱,通过valueOf方法。

备注:valueOf方法 (int --->  Integer)

 static Integer valueOf(int i)
Returns a Integer instance for the specified integer value.
static Integer valueOf(String string)
Parses the specified string as a signed decimal integer value.

(2)x = x+5;//自动拆箱。通过intValue方法。

备注:intValue方法(Integer--->int)

 int    intValue()
Gets the primitive value of this int.

2. 需要注意:

(1)在使用时候,Integer  x = null ;上面的代码就会出现NullPointerException。

3. 案例演示:

 package cn.itcast_05;

 /*
* JDK5的新特性
* 自动装箱:把基本类型转换为包装类类型
* 自动拆箱:把包装类类型转换为基本类型
*
* 注意一个小问题:
* 在使用时,Integer x = null;代码就会出现NullPointerException。
* 建议先判断是否为null,然后再使用。
*/
public class IntegerDemo {
public static void main(String[] args) {
// 定义了一个int类型的包装类类型变量i
// Integer i = new Integer(100);
Integer ii = 100;
ii += 200;
System.out.println("ii:" + ii); // 通过反编译后的代码
// Integer ii = Integer.valueOf(100); //自动装箱
// ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再自动装箱
// System.out.println((new StringBuilder("ii:")).append(ii).toString()); //Integer iii = null;
// NullPointerException
if (iii != null) {
iii += 1000;
System.out.println(iii);
}
}
}

注意:

(1)Integer  ii = 100;                    等价于:

        Integer ii = Integer.valueOf(100);

通过反编译.class文件知道,这里自动jvm执行这个代码(jvm执行.class文件)时候,实现了自动装箱。

(2) ii += 200;                               等价于:

         ii = Integer.valueOf(ii.intValue() + 200);  //自动拆箱,再自动装箱

(3)System.out.println("ii:" + ii);     等价于:

System.out.println((new StringBuilder("ii:")).append(ii).toString());

内部使用StringBuilder进行字符串拼接。