class BoxingTest
{
public static void main(String[] args)
{
Integer i1 = 100;
Integer i2 = 100;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2"); Integer i3 = 200;
Integer i4 = 200;
if (i3 == i4)
System.out.println("i3 == i4");
else
System.out.println("i3 != i4"); }
}
输出
i1 == i2
i3 != i4
为什么?
{
public static void main(String[] args)
{
Integer i1 = 100;
Integer i2 = 100;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2"); Integer i3 = 200;
Integer i4 = 200;
if (i3 == i4)
System.out.println("i3 == i4");
else
System.out.println("i3 != i4"); }
}
输出
i1 == i2
i3 != i4
为什么?
Integer i1 = new Integer(100);
Integer i2 = new Integer(100);
你如果用==来比较应该都是FALSE才对啊!
狂晕中......
把
i3==i4换为(int)i3==i4就OK了.不知道为什么...
i3 i4用toString() intValue()得到的值都是一样的.为什么==却是false呢?
难道比较的是他们的地址...
如果是地址那么为什么
而之前的i1==i2又行呢...?
却实是没有想通啊!
Integer i1 = 100 和Integer i1 = Integer.valueOf(100)是等效的。JDK1.5开始,把一些可能会频繁使用的值(-128 ~ 127)存在了cache中, 而不是新生成一个Integer对象。所以在比较时,对象指的都是同一个,因此为true.Integer i1 = 128, i2 =128 则结果为false(因为超过了值得范围)。Integer i1 = Integer.valueOf(“100”) ; Integer i2= Integer.valueOf(“100”) 时,结果也为false。 因为从String型转换到Interger时,不会使用到cache
i1 == i2
i3 != i4
我也在纳闷哦~
说的好像有道理,不知道有没有理论依据?
你这段代码中的“==”比较的时引用而不是具体的值。这样GEMPMGR的解释就差不多了。
我的怎么不行?!
不知道这算不算一个bug, 因为jdk1.5以前, 对象的比较都是用equals的。
== 比较的应该是地址
Integer i3 = 200;
Integer -> int 自动拆箱就不行了,所以就新建了对象,
Integer i4 = 200;i3,i4是两个对象,用==比较就不行了,就需要equal了ok?
果然是那原因
学习了
佩服佩服
class BoxingTest
{
public static void main(String[] args)
{
Integer i1 = new Integer(100);
Integer i2 = new Integer(100);
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");Integer i3 = new Integer(200);
Integer i4 = new Integer(200);
if (i3 == i4)
System.out.println("i3 == i4");
else
System.out.println("i3 != i4");}
}后的输出结果变成:
i1 != i2
i3 != i4
了。
真是奇怪。不解~~~