谈谈Java的自动装箱和拆箱

发表于:2012-3-31 10:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mlc0202    来源:51Testing软件测试网采编

  Java作为面向对象语言,有人认为所看到的都是对象,事实上,在Java SE 5之前,基本类型默认并不是采用对象存在的如果您想要把基本类型作为对象来处理,就必须自行转换,不过,在Java SE 5之后,为基本数据类型提供了自动装箱和拆箱功能,使得将基本类型转换为对象变得极其便捷。

  1. 在这里来捋一捋java的基本数据类型,不理不要紧,一理才发现俺也掌握的不是那么明确,在这里俺也再次学习下  
  2. 总计有八个,分别是  
  3. byte字节型(一个字节),char字符型(两个字节),short短整型(两个字节),int整型(四个字节),  
  4. long长整型(八个字节),float浮点型(四个字节),double 双精度浮点型(八个字节),boolean型(一个字节)

  在javase5之前,如果想要把基本数据类型作为对象来操作,就需要采用对应的对象,来把它们打包才行

  现在虽然不用这样了,但其中也有一些要注意的地方,俺揪出来晒晒。

  先说说类和对象,建立个概念吧先

  1. 类--可以认为是对象的设计图  
  2. 对象--是按照设计图实现了的具体工具  
  3. 先这么简单理解吧,如果真要扯开了说,那可是软件工程里面的一门专业课,我们有个概念就好

  之所以要将基本类型数据打包成为对象,原因很简单,是因为对象可以携带更多的数据。

  手动、自动装箱拆箱示例

  Long,Integer,Double,Float,Boolean等等的类就是所谓的wrapper类,就跟wrapper这个单词所代表的意思一样,就是提供一个“包装,加壳”,把基本数据类型放在里面,来看代码,体会下先

  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. 基本数据类型本身没有什么方法,当你运行之后会发现,它仍然可以正确运行,这就自动装箱和拆箱带来的好处

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号