autoboxing和unboxing


每一个基本类型都有一个与之对应的类,这个类就称为对象包装器。 例如, Integer。 Long、Double、Float、Short、Byte、Character...

基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE5.0开始提供的功能。

虽然为打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用。


    autoboxing和unboxing

    在Java中,所有要处理的东西几乎都是对象(Object)。然而基本(Primitive)数据类型不是对象,也就是int、double、boolean等定义的变量,以及在程序中直接写下的字面常量。
使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。 要使用打包类型(Wrapper Types)才能将基本数据类型包装为对象。

map接口中的put(k,v)方法中的v参数要求的是对象的,其一般用法:

范例1:

 import java.util.*;

  public class TestMap {
  public static void main(String args[]) {
  Map m1 = new HashMap();
  m1.put("one",new Integer(1));//v参数是整形对象对象
  m1.put("two",new Integer(2));
  m1.put("three",new Integer(3));
  System.out.println(m1);
  if(m1.containsKey("two")) {
  int i = ((Integer)m1.get("two"))。intValue();//强制转换为整形对象在得出值
  System.out.println(i);
  }
  }

  }


   在进行编译时,编译器再自动根据您写下的语句,判断是否进行自动装箱动作。在上例中integer参考的会是Integer类的实例。同样的动作可以适用于boolean、byte、short、char、long、float、double等基本数据类型,分别会使用对应的打包类型(WrapperTypes)Boolean、Byte、Short、Character、Long、Float或Double。下面直接使用自动装箱功能来改写范例1:

  import java.util.*;
  public class TestMap {
  public static void main(String args[]) {
  Map m1 = new HashMap();
  m1.put("one", 1);//自动打包,注意与上面代码的区别
  m1.put("two", 2);
  m1.put("three", 3);
  System.out.println(m1)
  if(m1.containsKey("two")) {
  int i = (Integer)m1.get("two");//自动解包
  System.out.println(i);
  }
  }

  }


基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。”

从以上内容可以知道:
1、打包后的是对象
2、对象是在堆中,而不是在栈中

至于这么做的原因,主要还是要使得基本类型与对象操作的一致性。强制转换的存在,导致了泛型的出现。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值