`
freesea
  • 浏览: 128893 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jdk5的拆箱与装箱

    博客分类:
  • JDK
阅读更多

    前几次课的讲解,我们了解了这样几个问题。<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">Java</nobr>的两种数据类型,和一些程序控制语句。今天,我们还是要通过一些例子。对上述东西有一个更深的理解。

    我们现在知道了,所有对象型的数据类型的基类是java.lang.Object .而写java程序的时候非常多的工作都是在写这些类,和实现里面的<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">方法</nobr>。而偏偏就有那么8种基本类型和他们不一样。以至于让你来回在这两种之间转换,这是很让人头疼的事情。Java中int,long,char这样的类型不是对象型。因此java里提供了一种叫做包装类(wrapper)的东西,使基本类型,有着相应的对象类型Integer,Long,Character等。这样就可以,先把基本类型的东西,转成对象来用,然后再转回去。来来回回,千锤百炼。

    到了jdk5.0的时候呢,就不用了。看下面的例子:

<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">实践</nobr>:

java 代码
  1. public class Test1 {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.         // 装箱   
  6.   
  7.         int i = 0;   
  8.   
  9.         Integer integer = i;//i这么一个基本类型的数,可以赋值给Integer型的变量   
  10.   
  11.         // 简单的拆箱   
  12.   
  13.         int j = integer; //integer这种原始类型的数,也能赋值给j这个原始类型的变量   
  14.   
  15.     
  16.   
  17.         Integer counter = 1;        // 装箱   
  18.   
  19.         int counter2 = counter;     // 拆箱   
  20.   
  21.     
  22.   
  23.         while (counter < 100) {   
  24.   
  25.           System.out.println("计数 "+counter++);  //看啊,counter这个对象型的数,还能自动增加   
  26.   
  27.         }   
  28.   
  29.     }   
  30.   
  31. }    

 

 在幕后JVM已经自动执行了转换,同理Boolean和boolean之间也可以,自动拆箱装箱。但是,Integer和int毕竟还是有着不同的。

    看下面例子:

java 代码
  1. public class Test2 {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.        Integer i1 = 256;   
  6.   
  7.         Integer i2 = 256;   
  8.   
  9.         if (i1 = = i2)    
  10.   
  11.         System.out.println("相等!");   
  12.   
  13.         else    
  14.   
  15.         System.out.println("不相等!");   
  16.   
  17.     }   
  18.   
  19. }    
 结果输出的是“不相等!”,两个对象比较,它们在内存中开辟的是两个地址怎么能相等呢?

    警告:你可千万不能依赖这个结果,请把i1和i2的值,改成100.(请看Test3.java)看看什么结果,令人惊讶的是改了个数,居然输出了“相等!”。

    这是因为JVM可以选择要尝试这段代码的最佳优化,并对两个Integer对象使用一个实例,这样的话“= =”就会返回true了。在自动装箱时对于值从–128到127之间的值,使用一个实例。

    这种装箱与拆箱机制对,程序流程控制语句,也有很大影响:

java 代码
  1. public class Test4 {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.         Boolean arriving = true;   
  6.   
  7.         Integer peopleInRoom = 0;   
  8.   
  9.         int maxCapacity = 100;   
  10.   
  11.     
  12.   
  13.         while (peopleInRoom < maxCapacity) {   
  14.   
  15.           if (arriving) {   
  16.   
  17.             System.out.printf("很高兴见到你.%d号先生\n",peopleInRoom);   
  18.   
  19.             peopleInRoom++;}    
  20.   
  21.           else {   
  22.   
  23.             peopleInRoom--;   
  24.   
  25.           }   
  26.   
  27.       }}}    

另外一个从unboxing获得好处的语句是switch.在jdk5.0之前的JVM,switch接受int、short、character或者byte值,而在unboxing的操作中,你现在也可以为它赋予新引入的enum之外的Integer,Short,Char以及Byte值。Enum的值,我们在后面的教程会详细讲述。

分享到:
评论

相关推荐

    jdk5.zip

    JDK 5引入了自动装箱与拆箱机制,简化了这一步骤,使得基本类型和包装类之间的转换更加流畅。 此外,枚举(Enums)的引入是JDK 5中的一个重要改变。枚举类型允许创建一组相关的常量,提高了代码的可读性和安全性。...

    jdk5_64.zip

    JDK5引入了自动装箱和拆箱机制,使得基本类型与包装类之间的转换变得无缝且高效,提升了编程的便利性。 四、变长参数(Varargs) JDK5引入的变长参数,允许方法接收可变数量的参数,形式为`public void methodType...

    java jdk 5学习笔记

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

    jdk5 win7 64位

    - **自动装箱/拆箱(Autoboxing and Unboxing)**:自动装箱将基本类型与对应的包装类之间进行转换,简化了代码。 - **可变参数(Varargs)**:允许在方法声明中使用可变长度的参数列表,方便调用。 - **增强的...

    JDK 5.0.zip

    3. **自动装箱与拆箱**:JDK 5.0中,原始类型(如int)与对应的包装类(如Integer)之间可以自动进行装箱(将原始类型转换为对象)和拆箱(将对象转换为原始类型)操作,简化了代码编写。 4. **可变参数(Varargs)...

    JDK5免安装解压包

    3. **自动装箱与拆箱(Autoboxing and Unboxing)** 自动装箱和拆箱简化了基本类型与包装类之间的转换。这意味着开发者不再需要手动进行如Integer i = new Integer(5); 这样的操作,而是可以直接写成Integer i = 5;...

    JDK5up22 Windows64位绿色版

    1. **自动装箱与拆箱**:JDK5引入了自动装箱和拆箱的概念,使得基本类型和其对应的包装类之间可以无缝转换,提高了代码的可读性。 2. **枚举类型(Enum)**:JDK5引入了枚举,这是一种新的数据类型,用于表示有限...

    Javajdk5学习笔记

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

    jdk5 64位exe文件.zip

    3. **自动装箱与拆箱(Autoboxing and Unboxing)** 自动装箱是指将基本类型与对应的包装类之间进行自动转换,而自动拆箱则是相反的过程。这一特性简化了代码,使得处理基本类型和它们的包装类更加方便。 4. **...

    jdk5 windows 32位.rar

    2. **Autoboxing/Unboxing**:自动装箱和拆箱功能,使得基本类型与对应的包装类之间可以无缝转换。 3. **枚举类型(enum)**:增强了枚举的使用,使其成为一种强大的数据类型,支持比较、遍历等操作。 4. **变量作用...

    JDK1.5、JDK5下载

    2. **自动装箱与拆箱(Autoboxing/Unboxing)**:自动装箱允许在基本类型和对应的包装类之间进行无缝转换,简化了代码编写。 3. **枚举类型(Enums)**:枚举是一种新的数据类型,用于定义有限集合的常量,提高了...

    JDK 5中文文档PDF文档JDK 5中文文档PDF文档

    3. **自动装箱/拆箱(Autoboxing and Unboxing)**:自动装箱允许在原始类型与对应的包装类之间无缝转换,简化了代码。例如,`Integer i = 5;` 会自动将int转换为Integer对象,而 `int j = i;` 又会自动将Integer...

    JDK5_新特性

    7. **类型安全的自动装箱/拆箱**: 自动封箱和解封在JDK5.0中进行了优化,确保类型安全,避免了因隐式类型转换可能导致的错误。 8. **注解(Annotations)**: 注解提供了一种元数据机制,允许在代码中添加信息,...

    tomcat5 兼容jdk1.4插件

    JDK 5在2004年发布,引入了许多重要的新特性和改进,包括泛型、枚举、自动装箱/拆箱、可变参数等。因此,如果用户仍然使用JDK 1.4,那么他们将无法直接运行Tomcat 5.x。而通过提供这个“兼容jdk1.4插件”,开发者...

    jdk5_8源码

    Java 5引入了许多重要的新特性,如泛型、枚举、自动装箱拆箱、可变参数、增强的for循环(foreach)、类型推断(`varargs`)等。源码分析可以帮助开发者深入理解这些特性的实现机制,提升编程效率。 2. **Java 6...

    java入门经典JDK5

    首先,JDK5中最重要的更新之一是自动类型装箱和拆箱。在之前的版本中,处理原始类型(如int)与包装类(如Integer)之间的转换需要手动进行,而在JDK5中,这一过程被自动处理,显著减少了程序员的工作量和出错的可能...

    良葛格JDK5学习笔记

    但JDK5引入了自动装箱(Autoboxing)和拆箱(Unboxing)机制,使得在基本类型与对象之间转换变得更加方便。例如,`Integer i = 10;`会自动将int值装箱为Integer对象,而`int j = i;`则会自动拆箱。 二、枚举类型...

    jdk-1_5_0_22-linux-amd64.bin

    3. **自动装箱与拆箱**:自动装箱允许基本数据类型与它们对应的包装器类型之间无缝转换,简化了代码。 4. **增强的for循环**(foreach):也叫迭代器简化,使得遍历数组和集合更加简洁。 5. **类型安全的异构容器*...

    jdk5.0 资源下载

    2. 自动装箱/拆箱(Autoboxing and Unboxing):自动装箱允许基本数据类型与对应的包装类之间进行无缝转换,简化了代码,提高了编写效率。 3. 枚举类型(Enums):JDK5.0引入了枚举类型,使得常量的定义更加规范,...

    包含 jdk1.5免安装、jdk1.6免安装、jdk1.8(32和64)

    2. **Autoboxing/Unboxing(自动装箱/拆箱)**:简化了基本类型与对应的包装类之间的转换。 3. **枚举(Enums)**:提供了一种新的数据类型,用于创建固定的、不可变的值集合。 4. **Annotations(注解)**:提供了...

Global site tag (gtag.js) - Google Analytics