为什么我在我的java代码中获得下一个输出? (假真)

时间:2016-03-02 21:31:08

标签: java

我认为输出应该是(true true)。对不起我的英文

  public class A{
     public static void main(String[] args)  {
       Integer i1 = 128;
       Integer i2 = 128;
       System.out.println(i1 == i2);

       Integer i3 = 127;
       Integer i4 = 127;
       System.out.println(i3 == i4);
     }
    }

2 个答案:

答案 0 :(得分:2)

对于一系列值(至少-128-127),存在Integer个实例的缓存,在隐式转换intInteger时使用。

在这种情况下,128不在缓存中,因此表示该值的每个Integer对象都是新的且不同。

另一方面,值 保证在缓存中,因此重复获取Integer的相同实例。

答案 1 :(得分:0)

与原始int相反,整数是一个对象。您的比较是比较两个Integer类型的对象。我有点惊讶你得到“虚假的真实”。如果你改为尝试:

System.out.println(i1.intValue() == i2.intValue());
System.out.println(i3.intValue() == i4.intValue());

你应该得到预期的结果。