转载:http://blog.csdn.net/jairuschan/article/details/7513045
自动装箱定义:
将基础类型传给其相应的封装类,便是自动装箱;
</pre><pre name="code" class="java">Integer i = 100;
自动拆箱定义:
将Integer 类型的对象赋值给其相应原始数据类型的变量;
Integer integer = 100;
int i = integer;
拆箱就是调用了 integer 的 intValue()方法;
扩展:
- Integer integer400=400;
- int int400=400;
- System.out.println(integer400==int400); ==> true
实现了自动拆箱;
- Integer integer100=100;
- int int100=100;
- System.out.println(integer100.equals(int100));
陷阱:
1.
- Integer integer100=null;
- int int100=integer100;
这两行代码是完全合法的,完全能够通过编译的,但是在运行时,就会抛出空指针异常。其中,integer100为Integer类型的对象,它当然可以指向null。但在第二行时,就会对integer100进行拆箱,也就是对一个null对象执行intValue()方法,当然会抛出空指针异常。所以,有拆箱操作时一定要特别注意封装类对象是否为null。
2.- Integer i1=100;
- Integer i2=100;
- Integer i3=300;
- Integer i4=300;
- System.out.println(i1==i2);
- System.out.println(i3==i4);
因为i1、i2、i3、i4都是Integer类型的,所以我们想,运行结果应该都是false。但是,真实的运行结果为“System.out.println(i1==i2);”为 true,但是“System.out.println(i3==i4);”为false。也就意味着,i1与i2这两个Integer类型的引用指向了同一个对象,而i3与i4指向了不同的对象。
Integer.valueOf(int i)中有限制;