/*
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呢????
*/
解决方案 »
- 【提问】java关键字volatile、双重检查 单例模式的应用
- 请教牛人,通过java怎么截取网络数据包????急急!!!!
- 进行JAVA学习采用何种操作系统
- 提示资源未找到,谁能解释一下下面这段代码
- 请问部署在同一个应用服务上的两个不同的war包,其中一个能否用类反射机制读到另一个war包的类信息?
- 求教高手~~~~
- 显示JLabel的问题?加急,解决即结贴!!!
- 谁能把这段代码帮我优化一下
- weblogic和websphere是不是两个类似jbuilder的开发工具啊?
- JBuilder7中怎样使用javamail?
- 请教一下Method.invoke方法
- 研究java源代码:关于Arrays.sort
因为从-127到128之间的Integer数,Java在Integer中有事先缓存好的原型对象,每次返回的都是同一个Integer对象,只有不在这个范围的数才会new出一个Integer,你可以试试300时,b1就是false了,而i3和i4则确实是两个Integer对象.
2. 对象间用==比校的是两个对象的引用地址是否一致,即比校是不是一个对象.而不是比内容是否一致
3. Integer应该用equal来比校是否相等.
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的任何一个值,每次自动装箱时,都会在内存中产生一分不同的拷贝
*/