我知道int
范围-2147483648
到+2147483647
,但我在这里得到true
和false
的输出。为什么?实际上i1
和i2
指向同一个对象,因此输出为true
。我可以理解,但i3
和i4
也指向同一个对象,但输出为false
。为什么呢?
public class MainClass {
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);
}
}
输出
true
false
为什么输出应该是这样的?
答案 0 :(得分:2)
因为您使用的是Integer
对象。对于Integer
对象,-128 to 127
之间的值合并
答案 1 :(得分:0)
问题在于==
和equals
之间的区别。 ==
只是测试两个Integer
变量是否指向相同的对象,可以是true
或false
,具体取决于你的JVM。 equals
实际上会测试它们是否具有相同的值。因此,在这种情况下,您需要使用equals
:
// ...
System.out.println(i1.equals(i2));
// ...
System.out.println(i3.equals(i4));