JAVA中的自动拆箱和装箱
java中的自动拆箱和装箱是jdk1.5及之后的新特性,我一直没太理解是怎么一回事,最近抽空终于把它的相关知识点整理了一下。
首先让我们了解一下什么是Integer类,从Integer入手:
Integer
Integer 类在对象中包装了一个基本类型int的值。Integer类型的对象包含一个 int 类型的字段。此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,同时还提供了其他一些处理int类型时非常有用的常量和方法。
构造方法
Integer类有两种构造方法:
Integer(int number)
Integer(String str)
*这里注意要用数值型String变量作为参数,如123,否则将会抛出NumberFormatException异常。
下面用一段代表来说明一下:
// 方式1 Integer(int number)
int i=100;
Integer a = new Integer(i);
System.out.println("a:"+a);
//方式2 Integer(String str)
String s = new String("100");
/*
* NumberFormatException
* String s = new String("abc");
*/
Integer b=new Integer(s);
System.out.println("b:"+b);
这里运行结果为:
a:100
b:100
常见类
Integer类的常用方法如下
好了,有了以上的基础知识,我们再来看什么是java的自动装箱和拆箱;
装箱和拆箱
其实拆装箱我们就可以想象为把东西装进箱子里,然后从箱子里拆出来,什么意思呢?我们来结合代码看
先看第一段代码:
Integer a = new Integer(66);
这里的a我们知道是一个对象引用,引用了Integer这个类定义的对象,这里的66是类Integer的构造方法中的参数。当然我们也可以这样写:
int a = 66;
也就是使用基本数据类型直接复制即可,
现在使用integer这个包装类就相当于把数字装进箱子里一样,这样就是一个对象,而不是一个简单的数值类型了,我们再看这个
int i = a.intValue();
上面的类型就是把integer这个包装类型的数据转换成int类型的基本数据类型,这个过程就好比把数据从箱子里拿出来,也就是拆箱,还原成原本的int类型!
这就是拆箱和装箱!
那什么是自动装箱和拆箱呢?
自动装箱和拆箱
Integer b = 88;
这个就是自动装箱了,自动将数值转成integer类型的数据
int d = b;
这个就是自动拆箱,将这个数据自动转换成int型,然后赋值给d这个变量。
有关自动装箱和拆箱的问题
当然,自动装箱和拆箱这里还有些问题需要我们注意
先看这段代码
Integer a = 1100;
Integer b = 1100;
System.out.println(a == b);
这段代码的结果是什么呢?
居然报错了!
这里隐含了一个知识点
a 和 b的取值只要在-128到127之间,那么他们指的就是同一个,如果是在这个范围之外的数字,就指的不是同一个值,那结果就是false了