java jdk5 中的装箱与拆箱

原创 2007年10月02日 21:35:00

看过.NET基础的朋友可能对这个装箱和拆箱的概念并不陌生。首先,我们必须明确一点,在Java中,有两种截然不同的数据类型:值类型和引用类型。值类型的数据不是对象,因而所占的内存和资源都相对较少,但是不能作为对象调用其toString()、hashCode()、getClass()、equals()等等方法,也不能被直接加入到集合中;引用类型的数据是一个一个的对象,占用内存和资源较多,但是提供丰富的访问方法,同时作为真正的对象,可以直接放入集合。

所谓装箱,就是把值类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double,等等。

所谓拆箱,就是跟装箱的方向相反将Integer及Double这样的引用类型的对象重新简化为值类型的数据

在J2SE 5.0发布之前,我们只能手工的处理装箱和拆箱,而现在,编译器可以帮我们自动地完成这些必要的步骤。下面的代码我提供两个版本的装箱和拆箱,一个版本使用手工的方式,另一个版本则把这些显而易见的代码交给编译器去完成:

 public static void manualBoxingUnboxing(int i) {
  ArrayList
<Integer> aList = new ArrayList<Integer>();
  aList.add(
0new Integer(i));
  
int a = aList.get(0).intValue();
  System.out.println(
"The value of i is " + a);
 }


 
public static void autoBoxingUnboxing(int i) {
  ArrayList
<Integer> aList = new ArrayList<Integer>();
  aList.add(
0, i);
  
int a = aList.get(0);
  System.out.println(
"The value of i is " + a);
 }

看到了吧,在J2SE 5.0中,我们不再需要显式的去将一个值类型的数据转换成相应的对象,从而把它作为对象传给其他方法,也不必手工的将那个代表一个数值的对象拆箱为相应的值类型数据。当然,这里有一个问题必须要做一些说明:对于值类型和引用类型,在资源占用上,还是有明显区别的,在使用这一方便特性的同时,不要简单的忘记了它们本质上的不同。

关于Integer补充一个例子:

public class wrapper {
    
public static void main(String[] args) {

    Integer i1 
= 129;
    Integer i2 
= 129;
    Integer i3 
= -128;
    Integer i4 
= -128;
    
/*two equal integers(between-128~127),the result is "equal!"
     else ,it 's "not equal!". why? Because the JVM try to optimize
     the code ,so between -128~127 ,it use the same object 
*/


    
if (i1 == i2) 
        System.out.println(
"equal!");
    
else 
        System.out.println(
"not equal!");
    
if (i3==i4)
        System.out.print(
"equal!");
    
else 
        System.out.println(
"not equal!");

    }

 
 

 

相关文章推荐

JAVA JDK1.5新特性<静态带入、可变参数、增强For循环、自动装箱及自动拆箱>

一、静态导入 1、写法:         import staticjava.util.Arrays.*;//导入的是Arrays这个类中的所以静态成员。         import stat...

java JDK1.5新特性(一) [静态导入] [可变参数] [增强for] [自动装箱拆箱] [枚举]

------- android培训、java培训、期待与您交流!  ---------- 静态导入 Static import 静态导入的优缺点 可变参数 Varargs 可变参数的特点...

装箱与拆箱(Java核心卷1 - D5)

八种基本类型都对应一个类类型 byte —— Byte short —— Short int —— Integer long —— Long float —— Float double ...

jdk 5.0 装箱 拆箱

在Java中,有两种截然不同的数据类型:值类型和引用类型。 值类型的数据不是对象,因而所占的内存和资源都相对较少,但是不能作为对象调用其toString()、hashCode()、getClass()...

黑马程序员-jdk1.5新特性--基本数据类型的自动拆箱与装箱

自动装箱:   Interger num1=12;自动拆箱  System.out.println(num1+12); 基本数据类型的对象缓存:  Integer num1=12;  Integer ...
  • laladin
  • laladin
  • 2011年07月09日 16:06
  • 213

JDK1.5新特性之自动装箱与自动拆箱

JDK1.5提供了很多新的特性,比如shu

黑马程序员——静态导入,可变参数,自动拆箱装箱以及享元设计模式 JDK1.5新特性

----------------------    android培训    java培训   期待与您交流!    ----------------------                ...

jdk1.5新特性之自动装箱与自动拆箱

jdk1.5新特性之-----自动装箱与自动拆箱    java是面向对象 的语言,任何事物都可以使用类进行描述,sun就使用了  一些类描述java中八种基本数据类型数据     基本数据...
  • oguro
  • oguro
  • 2016年12月16日 15:53
  • 191

使用jdk1.5装箱及拆箱功能时注意的问题

转自:http://blog.csdn.net/Senton/archive/2007/06/06/1639943.aspx我们知道java中所有到的类型要么就是引用类型和要么就是原始数据类型,其中原...
  • FG2006
  • FG2006
  • 2011年05月07日 15:39
  • 558
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java jdk5 中的装箱与拆箱
举报原因:
原因补充:

(最多只允许输入30个字)