黑马程序员-Java的自动拆箱和装箱

来源:互联网 发布:文怡小虫淘宝 编辑:程序博客网 时间:2024/05/17 04:48

---------------------- android培训、java培训、期待与您交流! ----------------------

Java1.5引入了其中一个新特性就是自动装箱和拆箱,首先我们需要知道为什么会有自动拆箱和装箱,那是因为java除了有8种基本数据类型外,还提供了与8种基本数据类型一一对应的对象,那么为什么会有提供这几种对象呢,那是因为有时候,我们需要将基本数据类型转换为对象,例如在使用Map对象要操作remove()方法时,需要传入的参数是对象而不是基本数据类型,而如果每一次你需要将基本数据类型转换为对象是都需要使用如

Integer i = new Integer(1);这样就比较麻烦了,为此,java1.5之后便提供了一种简单的方法,就是有虚拟机自动为你转换,你只要写Integer I = 1;在这个过程中java虚拟机自动把1装入一个对象中,因此称为自动装箱。同理,要把一个对象转换为基本数据类型的时候你也不用再int I = (Integer对象).intValue()这样写了,只要int I = (Integer对象)就可以了,这就是自动拆箱。但是使用自动拆箱和装箱也是有需要注意的如,比较下面两个式子的结果

1

Integer i1 = 200;Integer i2 = 200;if(i1 == i2)    System.out.println(i1 == i2);else    System.out.println(i1 == i2);

2

Integer i1 = 20;Integer i2 = 20;If(i1 == i2)    System.out.println(i1 == i2);else    System.out.println(i1 == i2);

 

根据自动装箱和拆箱的机制,我们会以为结果是相等的,但是结果确是不同的,其实,==除了来比较两个基本数据类型的变量值是否相等外,也用来判断两个对象引用名称是否参考至同一个对象,在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,所以当i1和i2在一个字节内时是参考至同一个对象的,但是如果超过一个字节,被装箱的Integer对象并不会被重用,所有i1和i2用==比较时是不相等的。

 

---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:edu.csdn.net/heima