} } }

    Java主动装箱、主动拆箱

    添加时间:2013-6-21 点击量:

    一、媒介


    Java主动装箱和主动拆箱是JDK5.0版本供给的新特点,所以在JDK5.0后的版本中都可以应用,之前的版本则不支撑该特点。


    懂得主动装箱和主动拆箱须要先对java中的8种原始数据类型和相对应的封装类有所懂得。



    二、8种原始数据类型及其对应的封装类



     byte       ---> Byte
    

    short ---> Short

    int ---> Integer

    long ---> Long

    float ---> Float

    double ---> Double

    char ---> Character

    boolean ---> Boolean


    注:原始数据类型的封装类都在java.lang包下,可以直接应用



    三、什么是主动装箱


    主动装箱指的是:可以将一个原始数据类型直接赋值给响应的封装类,其类型转换工作由java编译器主动处理惩罚,如:



    Byte b = 1;
    

    Short s
    = 2000;

    Integer i
    = 300000;

    Float f
    = 2.5f;

    Double d
    = 2.555;

    Character c
    = 中;

    Boolean bln
    = true;


    在没有主动装箱时(JDK5.0前的版本),想要创建一个原始数据类型封装类对象,须要改成下面这种情势(以Integer为例):



    //以下三种体式格式都可创建一个Integer对象
    

    Integer i
    = new Integer(1);

    Integer j
    = new Integer(1);

    Integer k
    = new Integer.valueOf(1);


    注:主动装箱可以简单懂得为原始数据类型可以主动装载成封装类



    四、什么是主动拆箱


    主动拆箱指的是:原始数据类型的封装类对象可以算作原始数据类型来处理惩罚,此中的转换工作由java编译器主动处理惩罚,如:



    Integer i = 2000;
    

    Character c
    = 中;

    int value = i + c + 100;


    在没有主动拆箱前(JDK5.0前的版本),上述操纵须要改成下面这种情势:



    Integer i = 2000;
    

    Character c
    = 中;

    int value = i.intValue() + c.charValue() + 100;


    注:主动拆箱可以简单懂得为原始数据类型的封装类可以主动转换成原始数据类型



    五、主动装箱、主动拆箱带来的益处


    在实际开辟中,我们经常会操纵原始数据类型的封装类,也经常须要对原始数据类型与封装类彼此转换或做一些运算,


    若是没有主动装箱和主动拆箱,这些操纵装会很烦琐。所以主动装箱和主动拆箱带来的益处是很明显的。



    六、应用主动装箱与主动拆箱须要重视的题目,下面以2个案例来申明(口试中常见)


    (1) 浏览下面代码,写出输出成果



    Integer i = 100;
    
    Integer j
    = 100;
    System.out.println(i
    == j);
    System.out.println(i.equals(j));

    Integer m
    = 200;
    Integer n
    = 200;
    System.out.println(m
    == n);
    System.out.println(m.equals(n));

    int k = 100;
    System.out.println(k
    == j);
    System.out.println(j.equals(k));


    (2) 浏览下面代码,写出输出成果



    Integer i = 100;
    

    Integer j
    = new Integer(100);

    Integer k
    = Integer.valueOf(100);

    System.out.println(i
    == j);

    System.out.println(j
    == k);



    (3)下面代码是否有正确?若是正确,输出成果是什么?



    Integer i = 100;
    
    long j = 100;
    Long k
    = 100;

    System.out.println(i
    == j);
    System.out.println(j
    == k);



    案例解析(1) :


    输出成果是:



    true
    
    true
    false
    true
    true
    true


    懂得这道题的关键点有2个:


     1. ==斗劲运算符是引用地址斗劲,equals()办法是值斗劲


     2. 原始数据类型在主动装箱成封装类对象时,若是原始数据类型的值为-128~127(相当于byte值局限),java编译器会断定曾经是否有作过雷同的转换,若是有,则把以前装载好的封装类对象的引用地址直接赋给当前对象,所以Integer i = 100,Integer j = 100中,i 跟 j 共享一个Integer对象



    案例解析(2) :


    输出成果是:



    false
    
    false


    原因:new Integer(100) 与 Integer.valueOf(1)都是从头new出一个对象,所以i,j,k是三个不合的对象



    案例解析(3)


    代码有误,Long k = 100须要改成Long k = (long) k; 


    真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
    分享到: