java jdk5 中的装箱与拆箱

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

在JDK1.5之前.你必须这么写
Integer i = new Integer(10); 这个就是自动装箱

同理(1.5之后)
int i = new Interger(10) ; 这样子就是自动拆箱

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

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

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

  public   static   void  manualBoxingUnboxing( int  i)  {
  ArrayList
< Integer >  aList  =   new  ArrayList < Integer > ();
  aList.add(
0 new  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! " );

    }

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值