有什么区别?
public static void main(String[] args){
Integer integer1=1000;
Integer integer2=1000;
System.out.println(integer1==integer2);
}
结果:假
public static void main(String[] args){
Integer integer1=100;
Integer integer2=100;
System.out.println(integer1==integer2);
}
结果:真
我们可以尝试一下!
答案 0 :(得分:2)
-128和127之间的所有整数都被缓存,因为它们被更频繁地使用。如果您希望第一个示例有效,请尝试:
public static void main(String[] args){
Integer integer1=1000;
Integer integer2=1000;
System.out.println(integer1.equals(integer2));
}
或者,使用int
代替Integer
,因为Integer
是对象。
答案 1 :(得分:2)
根据JLS 5.1.7:
如果装箱的值p为true,false,一个字节,范围为\ u0000到\ u007f的字符,或 int或-128到127之间的短号,则让r1和r2是p的任意两次拳击转换的结果。始终是r1 == r2。
的情况
-128到127 之间的整数汇集在Java中。查看this源代码:
答案 2 :(得分:1)
在java中汇集-128到127之间的整数。
下面是自动装箱的结果,并创建了两个不同的对象:
Integer integer1=1000;integer1 and integer2 are referring to 2 different objects
Integer integer2=1000;
Integer integer1=100;both refer to the same because of pooling
Integer integer2=100;
答案 3 :(得分:1)
您有Integer
作为参考类型。 ==
仅在与对象一起使用时比较引用。
由于不变性和实习/汇集,整数的小值(至少在[-128,127]范围内),尽管这是特定于实现的,并且应该不依赖)可以设置为引用同一个对象。
对于第一个例子,大量放弃实习,ergo不同的引用,并且它的评估结果为false。
在第二个中,整数是相同的参考,比较是真的。
答案 4 :(得分:0)
你可以简单地使用int而不是Integer,它会起作用。否则请参考关于== vs equals()的任何其他答案。