JAVA 自动装箱与拆箱

来源:互联网 发布:淘宝女主角药妆店假货 编辑:程序博客网 时间:2024/04/19 23:39

转载:http://blog.csdn.net/jairuschan/article/details/7513045


自动装箱定义:

将基础类型传给其相应的封装类,便是自动装箱;

</pre><pre name="code" class="java">Integer i = 100;


装箱就是JDK帮你完成调用Integer.valueOf(i);


自动拆箱定义:

将Integer 类型的对象赋值给其相应原始数据类型的变量;

Integer integer = 100;int i = integer;

拆箱就是调用了 integer 的 intValue()方法;



扩展:

  1. Integer integer400=400;  
  2. int int400=400;  
  3. System.out.println(integer400==int400);     ==> true

实现了自动拆箱;


  1. Integer integer100=100;  
  2. int int100=100;  
  3. System.out.println(integer100.equals(int100));  
实现了自动装箱;


陷阱:

1.

  1. Integer integer100=null;  
  2. int int100=integer100;  

          这两行代码是完全合法的,完全能够通过编译的,但是在运行时,就会抛出空指针异常。其中,integer100为Integer类型的对象,它当然可以指向null。但在第二行时,就会对integer100进行拆箱,也就是对一个null对象执行intValue()方法,当然会抛出空指针异常。所以,有拆箱操作时一定要特别注意封装类对象是否为null。

2.

  1. Integer i1=100;  
  2. Integer i2=100;  
  3. Integer i3=300;  
  4. Integer i4=300;  
  5. System.out.println(i1==i2);  
  6. 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)中有限制;
0 0
原创粉丝点击