技术中心

这里象征着我们的态度和能力

>谈谈Java的自动装箱和拆箱
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-04-01      浏览次数:6397
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
  1. public class WrapperDemo{   
  2.     public staticvoid main(String[] args){   
  3.          int data1=21;   
  4.          int data2=24;   
  5.          //打包成为对象   
  6.          Integer data1Wrapper = new Integer(data1);   
  7.          Integer data2Wrapper = new Integer(data2);   
  8.          //原始数据直接除以3   
  9.          System.out.println(data1/3);   
  10.          //将数据打包,转换为double型,除以3   
  11.          System.out.println(data1Wrapper.doubleValue()/3);   
  12.         //比较   
  13.         System.out.println(data1Wrapper.compareTo(data2Wrapper));   
  14.     }   
  15.    
  16. }   


图1-1 WrapperDemo的运行结果

通过上面的代码和运行结果,看到了将基本数据类型打包成为对象带来的好处了吧,别着急,这还只是javase5之前的做法,在javase5之后就已经支持自动装箱和拆箱了,在这,就不再单独写代码出来了,只写几个能说明问题的语句就可以了,相信很容易理解的。

  1. javase5之前,手动打包    
  2. Integer data1 = new Integer(10);    
  3. 事项将基本类型数据转换为对象    
  4. javase5之后,支持自动打包    
  5. Integer data1 = 10;    
  6. 便可以实现将基本类型的数据转换为对象    
  7. eg:    
  8. 在上面的代码中,可以采用,可以直接进行两个基本数据类型的比较    
  9. data1.compareTo(data2);    
  10. 基本数据类型本身没有什么方法,当你运行之后会发现,它仍然可以正确运行,这就自动装箱和拆箱带来的好处 

再来说说自动装箱拆箱

自动装箱和拆箱,从本质上讲,是编译器帮了我们的忙,这就是所谓的“编译器蜜糖”,既然这么好,是不是就可以放心的用了呢?

先别着急,喝口水,咱再接着唠

看看下面的情况,您是否了解

  1. Integer i = null;//表明i没有参考至任何对象  
  2. int j = i ;//相当于 int j = i.intValue()  
  3. 这样的代码,编译时是可以通过的,因为它的语法是正确的,但在运行时,就会排除NullPointerException错误,这是由于i并没有参考至任何对象造成的 
  1. 个人建议,如果您对装箱拆箱不是理解的很清楚,最好还是按部就班的一步一步的对它进行装包和拆包,这样,有的时候,可能会为你节省很多纠错的时间哦 

还是自动装箱拆箱

  1. public class BoxDemo{  
  2.    public static void main(String[] args){  
  3.     Integer data1 = 500;  
  4.     Integer data2 = 500;  
  5.     System.out.println(data1==data2);  
  6.    }  

在你看到接下来的运行结果前,您先猜猜看,运行的结果会是怎样的呢?true or false?


图1-2 BoxDemo运行结果

false?没错,它就是false,自动装箱时,对于值从-128-127之间的数,被装箱后,会被放在内存中进行重用,

如果超出了这个值的范围就不会被重用的,所以每次new出来的都是一个新的对象,结果自然会是false。

  1. 在这里,区别一个概念“==”和equals()   
  2. “==”是比较两个对象是不是引用自同一个对象。   
  3. “equals()”是比较两个对象的内容。  
  4. 这个一定得搞清楚,否则,在遇到问题的时候,可真是会让人抓狂的。 
4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730