本帖最后由 liuyong13145 于 2010-05-09 14:51:43 编辑

解决方案 »

  1.   

    面向对象语言一个最大的特点就是封装
    但几个基本数据类型却没有这个特性
    故 在 1.5 后提供了几个基本类型的封装类
    装箱就是 比如 integer i = 100; 这个就自动装箱了 
    拆箱     int  j = i + 10; // 借用上边声明的 i
      

  2.   

    在Java中,所有您要处理的东西「几乎」都是对象(Object),例如您之前所使用的Scanner是对象,字符串(String)是对象,您之后还会看到更多的对象。然而有些是异常,基本(Primitive)数据类型不是对象,也就是您使用int、double、boolean等宣告的变量,以及您在程序中直接写下的字面常量。使用Java有一段时间的人都知道,有些时候您需要将基本类型转换为对象,例如使用Map时,要使用put()方法时需要的是对象而不是基本类型。您要使用包裹类型(Wrapper Types)才能将基本数据类型包装为对象,例如在 J2SE 1.4.2 之前,您要如下才能将int包装为一个Integer对象:
    Integer integer = new Integer(10);在 J2SE 5.0 之后您可以这么写:
    Integer integer = 10;事实上编译器在背后自动根据您写下的描述,为您进行自动装箱(Autoboxing)动作,同样的动作可以适用于 boolean、byte、short、char、long、float、double等基本类型,分别会使用对应的包裹类型(Wrapper Types)Boolean、Byte、Short、Character、Integer、Long、Float或Double。自动装箱运用的方法还可以如下:
    int i = 10;
    Integer integer = i;
     
    您也可以使用更一般化的Number,例如:
    Number number = 3.14f;3.14f会先被自动装箱为Float,然后指定给number。J2SE 5.0中可以自动装箱,也可以自动拆箱(Unboxing),例如下面这样写是可以的:
    Integer fooInteger = 10;
    int fooPrimitive = fooInteger;
     
    在运算时,也可以自动装箱与拆箱,例如:
    Integer i = 10;
    System.out.println(i + 10);
    System.out.println(i++);上例中会显示20与10,编译器会自动帮您进行自动装箱与拆箱,即10会先被装箱,然后在i + 10时会先拆箱,进行加法运算;i++该行也是先拆箱再进行递增运算。再来看一个例子:
    Boolean boo = true;
    System.out.println(boo && false);同样的,先将boo拆箱,再与false进行AND运算,结果会显示false。