java中的自动拆箱和自动包箱机制的理解!
来源:互联网 发布:软件研发部工作内容 编辑:程序博客网 时间:2024/06/05 16:51
java中的自动拆箱和自动包箱机制有关啊!
自动装箱/拆箱
在介绍“自动装箱/拆箱”机制前,先让我们来了解两个概念:
1)装箱:将一个值封装成为一个对象的过程
Integer iobj = new Integer( 100 ) ;
2)拆箱:从一个类型包装器中提取值的过程
int i = iobj.intValue() ;
注:拆箱、装箱的概念从Java第一个版本开始就存在,并不是Java1.5新特性,注意我们说的是“自动拆箱/拆箱”
从J2SE5将自动装箱/拆箱的概念引入到Java中。
自动装箱:每当我们需要一种类型的对象时,基本数据类型就被自动封装到与它相同类型的包装器中,并返回
自动拆箱:当我们需要一个值时,这个被装箱到对象中的值就会被自动的提取出来,不需要我们手动去调用xxValue()方法。
自动装箱/拆箱机制的引入,大大简化了编程,免除了对值进行手工装箱/拆箱繁琐的工作,同时可以避免发生错误。而且,它对泛型有十分重要的作用。
自动装箱引入,不需要手工建立一个对象来包装一个基本类型,只需将一个基本类型直接赋值给类型包装器,Java会自动建立一个对象:
Integer iob = 100 ; //auto-box
自动拆箱引入,只要将这个对象引用赋给一个基本类型变量即可:int i = iob ; //auto-unbox
1)方法中自动装箱/拆箱:
自动装箱/拆箱会在传递一个参数给方法或者方法返回一个值时自动发生。
class AutoBox{
static int m( Integer v ){
return v ;
}
public static void main( String [] args ){
System.out.println( m(100 ) ;
}
}
2)表达式中的自动装箱/拆箱
Integer iob = new Integer( 100 ) ;
++iob ;
System.out.println( iob * 20 + 10 ) ;
3)布尔型及字符型的自动装箱/拆箱
Boolean b = true ; //auto-box
if( b ) System.out.println( "true" ) ; //auto-unbox
Character ch = 'x' ; //auto-box
char ch2 = ch ; //auto-unbox
当一个Boolean对象用作while、for、do...while条件表达式,它被自动拆箱为一个基本类型布尔值。
4)自动装箱/拆箱有助于避免错误发生
Integer iob = 1000 ;
int i = iob.byteValue() ;
System.out.println( i ) ; // -24,iob中的值能过调用byteValue()被自动拆箱,使存储在iob中的值1000被截取,得到垃圾数据-24
通常,自动装箱总是生成一个正确的对象,而自动拆箱总是生成一个正确的值
5)关于自动装箱/拆箱建议
到此,可能有人会说了,既然Java可以自动装箱/拆箱,还要基本数据类型干什么,而将基本类型全盘抛弃。虽然不使用基本数据类型完全可以,但它比起使用基本数据类型来说,它的效率要低得多,原因是自动装箱/拆箱增加了额外的系统负担,而基本类型则不会。
所以,通常情况下,类型包装器只是在基本类型需要用对象表示的场合下才使用,毕竟自动装箱/拆箱并不是为了消除基本数据类型才被加入到Java中的。
- java中的自动拆箱和自动包箱机制的理解!
- Java自动装箱机制和自动拆箱机制
- 深入理解Java的自动装箱和拆箱
- java中的自动装箱和自动拆箱
- Java中的自动装箱和拆箱
- Java中的自动装箱和拆箱
- java中的自动装箱和拆箱
- java中的拆箱和自动装箱
- java中的自动拆箱和装箱
- java自动装箱和拆箱机制详解
- php 命名空间 和 自动加载机制 的简单理解
- Java自动装箱和自动拆箱的陷阱
- java的自动装箱和自动拆箱
- Java 自动装箱和自动拆箱注意的问题
- Java的自动装箱和自动拆箱
- java 自动装箱 和 自动拆箱
- java自动装箱和自动拆箱
- Java自动拆箱和自动装箱
- 管理之困:居高不下的流动率 .
- JavaScript对象是“键-值”对的集合
- 新浪微博,腾讯微博mysql数据库主表猜想
- 行到水穷处,坐看云起时
- 什么是PLL, PLL的作用
- java中的自动拆箱和自动包箱机制的理解!
- silverlight 组合键调用方法
- WebView简介(加速加载篇)
- iphone全景照片的处理,加入panoramagl库的具体办法,泪奔啊~
- [翻译]Visual Studio2008的新功能:代码度量
- 黑马程序员_王康 java实现交通灯管理系统
- 解决C++/CLI中关于“MissingManifestResourceException类型的未经处理的异常出现在mscorlib.dll”问题一例
- 动态显示gridview某列的和
- GWT RPC 原理浅析一