Java 为什么有些整数对象的==为真?
可能重复:Java 为什么有些整数对象的==为真?,java,integer,Java,Integer,可能重复: 我已从Khalid Mughal SCJP复制了以下程序片段,但无法 理解输出 public class RQ200_60 { public static void main(String[] args) { Integer i = -10; Integer j = -10; System.out.print(i==j); // output: true -- why true? System
我已从Khalid Mughal SCJP复制了以下程序片段,但无法
理解输出
public class RQ200_60 {
public static void main(String[] args) {
Integer i = -10;
Integer j = -10;
System.out.print(i==j); // output: true -- why true?
System.out.print(i.equals(j)); // output: true
Integer n = 128;
Integer m = 128;
System.out.print(n==m); // output: false
System.out.print(n.equals(m)); // output: true
}
}
上面的程序为第一个print语句提供输出true,但它应该提供false,因为它是与==关系运算符的引用比较。但第三次打印的结果是错误的,我不理解这种不一致
非常感谢您的解释 整数对象可能会被缓存,用于表示接近0的值的对象。(实现规范可能会告诉您一些细节)。这可能是为了节省内存(接近0的值很常见,为每个具有相同值的变量创建一个新对象将浪费大量内存)
==
检查两个事物是否为同一对象;对于具有相同值的任意两个给定变量,可以拥有或不拥有相同的整数对象。你不应该检查=
,因为你不应该关心它是否是同一个对象;重要的是整数的值,而不是它的标识。在第一种情况下,对象i
和j
都指向同一个缓存对象。默认情况下,-128到127之间的范围缓存为Integer
对象。我们可以使用增加范围有关缓存的答案是正确的。然而,如果你去
Integer i = new Integer(10);
Integer j = new Integer(10);
…然后您将避免缓存,结果将是您所期望的。在本例中,整数i
和整数j
包含整数范围内的整数值,整数的范围是-128到128
,而且整数n
和整数m
超出了整数
+1的范围,有趣的是,我不知道它是可配置的。我也不知道它是可配置的。根据、、@pst,从-128到127的自动装箱值必须是等同的。感谢您的编辑。在我的角落打字有点尴尬。