黑马程序员技术交流社区
标题:
请问 自动装箱和拆箱到底是什么意思呀
[打印本页]
作者:
wangyuyus
时间:
2013-11-17 13:05
标题:
请问 自动装箱和拆箱到底是什么意思呀
public class test3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer i1 =137;//自动装箱成整形对象
Integer i2 =137;//自动装箱成整形对象
System.out.println( i1==i2);//打印出false
/*137大于127,所以i1和i2指向了两个不同的堆内存对象。地址不相等,打印false*/
i1 =13;
i2 =13;
System.out.println( i1==i2); //打印出true
/*”13“被封装成对象并存放在常量池中,i1和i2都指向了常量池里同一个对象,地址相同,打印true*/
}
}
作者:
零下五度的水
时间:
2013-11-17 13:19
把 Integer 自动转成 int 就是自动拆箱,反过来就是自动拆箱
作者:
陈文杰
时间:
2013-11-17 13:25
这个问题我们也把equal引进来,一次性解决,深入了解一下吧。
Integer m = 128; Integer n = 128;
Integer a = 127; Integer b = 127;
m.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等
但m==n的结果是不相等的。
==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。
但a==b 结果是相等的。显然比较的内容相等。
为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?
由于自动装包,它们其实都是装在一个Integer对象中。
这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。
作者:
凝聚
时间:
2013-11-17 13:36
基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。
一般我们要创建一个类的对象的时候,我们会这样:
Class a = new Class(parameter);
当我们创建一个Integer对象时,却可以这样:
Integer i = 100; (注意:不是 int i = 100; )
实际上,执行上面那句代码的时候,系统为我们执行了:Integer i = new Integer(100); 此即基本数据类型的自动装箱功能。
自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出。如下可实现自动拆箱:
1 Integer i = 10; //装箱
2 int t = i; //拆箱
在进行运算时,也可以进行自动装箱与拆箱。
1 Integer i = 10;
2 System.out.println(i++);
??Integer的自动装箱
复制代码
//在-128~127 之外的数
Integer i1 = 200;
Integer i2 = 200;
System.out.println("i1==i2: "+(i1==i2));
// 在-128~127 之内的数
Integer i3 = 100;
Integer i4 = 100;
System.out.println("i3==i4: "+(i3==i4));
复制代码
输出的结果是:
i1==i2: false
i3==i4: true
作者:
hel
时间:
2013-11-17 13:58
本帖最后由 hel 于 2013-11-17 14:02 编辑
Integer i1 =137;//自动装箱成整形对象
以前要这样写
integer i1 = new Integer(137);
先将基本数据类型137包装称Integer类型
现在不用了直接就是 Integer i1 =137;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2