Java 自动打包解包

http://blog.csdn.net/u011599609/article/details/40921543
这里的装箱应该理解为 封装对象 ,即把基础数据类型(如 int)转换成基础类型封装类的对象(如 new Integer())
拆箱就是装箱的反过程,即把基础类型封装类的对象(如 new Integer())转换为基础数据类型(如 int)。
例子如下:
装箱: Integer a = new Integer() ;
              a = 100 ; //1.5以前不支持为对象如此赋值
拆箱: int b = new Integer(100) ;
自动拆装箱 是JDK1.5中新增加的内容 ,它可以将基本数据类型自动转换为它的包装类。或者相反。

基本数据类型与包装类对应关系如下:
short Short
int Integer
long Long
char Char
float Float
double Double
boolean Boolean


注意的问题:
众所周知java对原始数据类型如int、char、long等基本数据类型有自动打包成相应的复合类型Integer、Character、Long等的机制;也可以将复合类型自动转换为原始类型。
这取决于程序要进行怎样的处理。如:
int i = 0;
Integer obj = i;
-----
Integer obj = new Integer(0);
int i = obj;
但是并不是所有的地方都会进行自动的打包和解包。有些地方存在“陷阱”,不注意的话,会产生问题。如:
java.util包中的List接口有两个remove方法,一个接收int参数,表示删除指定位置的元素;一个接收Object参数,表示删除指定的元素(内部使用equals进行元素相等的判断)。
如果有一个List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
如果你调用list.remove(0);表示删除的是位置0上的元素即1。
如果你调用list.remove(new Integer(0));表示删除要0这个元素,但是list中没有这个元素,因此list元素不会发生变化。

评论

此博客中的热门博文

225 Implement Stack using Queues

232. Implement Queue using Stacks

20. Valid Parentheses