`

Java JDK:自动装箱和拆箱

    博客分类:
  • java
阅读更多
[size=large]Java JDK:自动装箱和拆箱
发布时间:2008-04-10 16:41:31     来源:    作者:    浏览:55
    ——此文章摘自《Java JDK6学习笔记》定价:¥59.90 特价:¥44.92 购买>>

    基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用。

    autoboxing和unboxing

    在Java中,所有要处理的东西几乎都是对象 (Object),例如之前所使用的Scanner是对象,字符串(String)也是对象,之后还会看到更多的对象。然而基本(Primitive)数据类型不是对象,也就是您使用int、double、boolean等定义的变量,以及您在程序中直接写下的字面常量。

    在前一个小节中已经大致看到了操作对象的方便性,而使用Java有一段时间的人都知道,有时需要将基本数据类型转换为对象。例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。

    要使用打包类型(Wrapper Types)才能将基本数据类型包装为对象,前一个小节中您已经知道在J2SE 5.0之前,要使用以下语句才能将int包装为一个Integer对象:
Integer integer = new Integer(10);


    在 J2SE 5.0之后提供了自动装箱的功能,您可以直接使用以下语句来打包基本数据类型:
Integer integer = 10;


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

    范例4.5  AutoBoxDemo.java
   
public class AutoBoxDemo {
        public static void main(String[] args) {
            Integer data1 = 10;
            Integer data2 = 20;           
            // 转为double值再除以3
            System.out.println(data1.doubleValue() / 3);
            // 进行两个值的比较
            System.out.println(data1.compareTo(data2));
        }
    }


    程序看来简洁了许多,data1与data2在运行时就是Integer的实例,可以直接进行对象操作。执行的结果如下:
    3.3333333333333335
    –1

    自动装箱运用的方法还可以如下:
  
 int i = 10;
    Integer integer = i;


    也可以使用更一般化的java.lang.Number类来自动装箱。例如:
 
  Number number = 3.14f;


    3.14f会先被自动装箱为Float,然后指定给number。

    从J2SE 5.0开始可以自动装箱,也可以自动拆箱(unboxing),也就是将对象中的基本数据形态信息从对象中自动取出。例如下面这样写是可以的:
  
 Integer fooInteger = 10;
    int fooPrimitive = fooInteger;


    fooInteger引用至自动装箱为Integer的实例后,如果被指定给一个int类型的变量fooPrimitive,则会自动变为int类型再指定给fooPrimitive。在运算时,也可以进行自动装箱与拆箱。例如:
   
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原来是Boolean的实例,在进行AND运算时,会先将boo拆箱,再与false进行AND运算,结果会显示false。[/size]
分享到:
评论

相关推荐

    浅谈Java自动装箱与拆箱及其陷阱

    Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...

    JavaJDK6学习笔记(林信良著)

    - **自动装箱/拆箱**:JDK6引入了自动装箱和拆箱功能,使得基本类型和其包装类之间的转换更加便捷。 - **可变参数**:允许一个方法接受不定数量的参数,增强了方法的灵活性。 - **增强的for循环(foreach)**:...

    java jdk 5学习笔记

    JDK 5引入了自动装箱和拆箱的概念,使得基础类型与对应的包装类之间可以无缝转换。例如,int与Integer,无需手动调用`Integer.valueOf()`或`.intValue()`。 2. **枚举类型(Enum)**: 在JDK 5之前,Java没有内置的...

    java jdk 1.5 API html

    在Java 1.5之前,需要手动进行装箱和拆箱,而1.5之后,系统会自动进行这些转换,提高了代码的简洁性。 5. **变量args(Varargs)** 在方法声明中,可以使用`...`操作符创建可变参数列表,使得方法能够接受任意数量...

    Java JDK 5.0学习笔记

    3. **自动装箱与拆箱(Autoboxing/Unboxing)**:Java 5.0引入了自动装箱和拆箱机制,使得基础数据类型和对应的包装类之间可以无缝转换。例如,一个整数可以直接赋值给Integer对象,反之亦然,这简化了代码并减少了...

    良葛格Java JDK 5.0学习笔记.rar

    2. **自动装箱/拆箱**:在JDK 5.0中,Java引入了自动装箱和拆箱功能,使得基本类型与对应的包装类之间可以无缝转换,提高了代码的可读性和简洁性。 3. **枚举类型**:枚举是Java中一种新的数据类型,用于定义一组...

    Professional.Java.JDK.6.Edition

    1. **自动装箱与拆箱**:JDK 6引入了自动装箱和拆箱功能,使得基本类型与对应的包装类之间可以无缝转换,提高了代码的简洁性和可读性。 2. **枚举类型的switch语句**:Java 6扩展了switch语句,允许使用枚举类型...

    《Java JDK 6 学习笔记》配书示例

    1. **自动装箱与拆箱**:Java 6中引入了自动装箱和拆箱功能,使得基本类型和其对应的包装类之间可以无缝转换,提高了代码的简洁性。 2. **增强的for循环(foreach)**:也称为迭代器简化,允许开发者以更简洁的方式...

    良葛格Java JDK 5[1].0学习笔记

    3. **自动装箱/拆箱**:Java 5.0实现了基本类型与对应的包装器类之间的自动转换,即自动装箱和拆箱。这简化了使用包装器类时的代码,消除了手动转换的必要。 4. **增强的for循环(foreach)**:也称为迭代器简化,...

    java jdk1.5

    JDK 1.5引入了自动装箱和拆箱机制,使得基本数据类型(如int)与对应的包装类(如Integer)可以无缝转换。这为开发带来了便利,避免了手动装箱和拆箱可能导致的NullPointerException。 三、枚举(Enums) Java 1.5...

    Javajdk5学习笔记

    1. **自动装箱与拆箱**:JDK 5引入了自动装箱和拆箱功能,使得基本类型和它们对应的包装类之间可以无缝转换,提高了代码的简洁性。例如,`Integer i = 10;` 和 `int j = i;` 这样的操作在JDK 5后变得非常自然。 2. ...

    Java JDK6(中文版)

    3. **自动装箱与拆箱**:在JDK6中,基本数据类型和其对应的包装类之间实现了自动装箱和拆箱操作,简化了代码编写,提升了开发效率。 4. **动态代理(Dynamic Proxies)**:动态代理机制允许在运行时创建符合特定...

    JAVA JDK6学习笔记

    - **自动装箱与拆箱**:简化了基本类型与包装类之间的转换。 - **注解(Annotation)**:用于元数据,提供编译器和运行时有关代码的附加信息。 3. **PPT简体版** 这部分资源很可能是对以上概念的可视化展示,...

    jdk1.5.0_12源代码

    在这个版本中,Java语言进行了重要的更新,包括泛型、枚举、自动装箱/拆箱、变长参数等,极大地提升了开发效率和代码的可读性。接下来,我们将详细探讨这些核心变化以及JDK源代码中的实现细节。 1. **泛型...

    java JDK帮助文档中文版

    例如,JDK 6引入了自动装箱拆箱、foreach循环、可变参数等。掌握这些新特性有助于写出更简洁、高效的代码。 4. **开发工具**:JDK附带了一系列开发工具,如`javac`编译器、`javadoc`文档生成器、`jdb`调试器、`jar`...

    Java-jdk1.5安装包

    Java 5.0引入了自动装箱和拆箱,使得这种转换更加便捷。例如,int和Integer之间的转换可以自动完成,简化了代码。 五、增强的for循环(Enhanced For Loop) 增强的for循环,也被称为foreach循环,使得遍历数组和...

    jdk1.5、1.6压缩包

    3. **自动装箱与拆箱**:自动装箱和拆箱使得基本数据类型与对应的包装类之间可以无缝切换,简化了代码编写。 4. **增强的for循环(foreach)**:增强的for循环简化了遍历数组和集合的操作,使得代码更加简洁。 5. ...

    jdk 1.5:1.6:1.7.zip

    3. **自动装箱和拆箱**:自动装箱允许基本类型与对应的包装类之间进行无缝转换,简化了代码。 4. **变量args**:在方法声明中使用`...`(可变参数),使得方法可以接受任意数量的相同类型的参数。 5. **增强的for...

    良葛格Java JDK 5.0学习笔记ch05

    自动装箱和拆箱是Java 5.0为了简化编程而引入的特性。它使得基本类型(如int)与对应的包装类(如Integer)之间可以自动转换。这意味着开发者不再需要手动调用如Integer.valueOf()或intValue()这样的方法。 四、可...

Global site tag (gtag.js) - Google Analytics