返回信息流发现自动装箱和拆箱还挺有意思的,发给大家看看~~第三种情况我还有些困惑,到底是iobj5自动拆箱还是ivalue自动装箱?求解答[ema11]
public class BoxingTest {
public static void main(String args[]){
Integer iobj1 = new Integer(1); //(1)
Integer iobj2 = 1;
System.out.println("iboj1==iobj2? " + (iobj1==iobj2)); //false
Integer iobj3 = 1; //(2)
Integer iobj4 = 1;
System.out.println("iboj3==iobj4? " + (iobj3==iobj4)); //true
// Integer iobj3 = 2000;
// Integer iobj4 = 2000;
// System.out.println("iboj3==iobj4? " + (iobj3==iobj4)); //false
Integer iobj5 = 1; //(3)
int ivalue = 1;
System.out.println("iboj5==ivalue? " + (iobj5==ivalue)); //true
Integer iobj6 = new Integer(1); //(4)
Integer iobj7 = new Integer(1);
System.out.println("iboj6==iobj7? " + (iobj6==iobj7)); //false
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #51932同步于 2016/7/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于自动装箱和自动拆箱
guanzhe
2016/7/26镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
int 的自动装箱,是系统执行了 Integer.valueOf(int i),先看看Integer.java的源码:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)
而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象
这个没有错~可是似乎不能说明第三种情况是ivalue自动装箱还是obj5自动拆箱的问题~~
【 在 yc1 的大作中提到: 】
: int 的自动装箱,是系统执行了 Integer.valueOf(int i),先看看Integer.java的源码:
: public static Integer valueOf(int i) {
: if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127
: ...................
好像int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html