【求助】有关自动装箱的问题: Integer i1 = 100; 会自动转化成 Integer i1 = new Integer(100); 么

xjyr 2008-11-15 05:36:36

/*
2008年11月15日17:33:06
有关自动装箱的问题:Integer i1 = 100; 会自动转化成 Integer i1 = new Integer(100); 么
*/

public class TestAutoboxing3
{
public static void main(String[] args)
{
Integer i1 = 100; //
Integer i2 = 100;
boolean b1 = (i1==i2);
System.out.println(b1);

Integer i3 = new Integer(100);
Integer i4 = new Integer(100);
boolean b2 = (i3==i4);
System.out.println(b2);
}
}
/*
在JDK 1.6中的运行结果是:
-----------------------
true
false
-----------------------
我看课本上说:
在JDK1.6中
Integer i1 = 100; 会自动转化成 Integer i1 = new Integer(100);
如果真是这样的话,那为什么 i1==i2 返回true,i3==i4返回false呢????
*/
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanyu87 2012-02-13
  • 打赏
  • 举报
回复
原来还有些模糊,现在清晰了。
xjyr 2008-11-15
  • 打赏
  • 举报
回复
谢谢Iangao ,小弟也贴出自己的一点心得

/*
2008年11月15日17:33:06
有关自动装箱的问题:Integer i1 = 100; 会自动转化成 Integer i1 = new Integer(100); 么

答案:
Integer i1 = 100;
100不是自动转化成 new Integer(100); 而是自动转化成Integer.valueOf(100)
*/

public class TestAutoboxing5
{
public static void main(String[] args)
{
Integer i1 = 100;
Integer i2 = 100;
boolean b1 = (i1==i2);
System.out.println(b1);

Integer i3 = Integer.valueOf(100);
Integer i4 = Integer.valueOf(100);
boolean b2 = (i3==i4);
System.out.println(b2);

Integer i5 = new Integer(100);
Integer i6 = new Integer(100);
boolean b3 = (i5==i6);
System.out.println(b3);
}
}
/*
在JDK 1.6中的运行结果是:
-----------------------
true
true
false
-----------------------
总结:
本程序说明了:
Integer i1 = 100; //100不是自动转化成 new Integer(100); 而是自动转化成Integer.valueOf(100)

下面是摘自某网友的话:
--------------------------------
1. Integer=100; 实际上调用的是Integer.valueOf(int i);
因为从-127到128之间的Integer数,Java在Integer中有事先缓存好的原型对象,
每次返回的都是同一个Integer对象,只有不在这个范围的数才会new出一个Integer,
你可以试试300时,b1就是false了,而i3和i4则确实是两个Integer对象.
2. 对象间用==比校的是两个对象的引用地址是否一致,即比校是不是一个对象.而不是
比内容是否一致
3. Integer应该用equal来比校是否相等.

--------------------------------
*/






再贴一个程序
/*
2008年11月15日17:33:06
自动装箱所产生的范围问题
*/

public class TestAutoboxing3
{
public static void main(String[] args)
{
Integer i1 = 100;
Integer i2 = 100;
boolean b1 = (i1==i2);
System.out.println(b1);

Integer i3 = 200;
Integer i4 = 200;
boolean b2 = (i3==i4);
System.out.println(b2);
}
}
/*
在JDK 1.6中的运行结果是:
-----------------------
true
false
-----------------------
-128到127的任何一个值,无论自动装箱多少次,在内存中都是只有一份拷贝
超过了-128到127的任何一个值,每次自动装箱时,都会在内存中产生一分不同的拷贝
*/
badlove3 2008-11-15
  • 打赏
  • 举报
回复
帮顶了~~~~~~~~~~~~
Iangao 2008-11-15
  • 打赏
  • 举报
回复
1. Integer=100; 实际上调用的是Integer.valueOf(int i);
因为从-127到128之间的Integer数,Java在Integer中有事先缓存好的原型对象,每次返回的都是同一个Integer对象,只有不在这个范围的数才会new出一个Integer,你可以试试300时,b1就是false了,而i3和i4则确实是两个Integer对象.
2. 对象间用==比校的是两个对象的引用地址是否一致,即比校是不是一个对象.而不是比内容是否一致
3. Integer应该用equal来比校是否相等.

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧