与Java中的==进行比较

时间:2014-08-09 19:18:56

标签: java comparison

public static void main(String[] args) throws FileNotFoundException, IOException {
    Integer a = 120;
    Integer b = 120;
    Integer c = 130;
    Integer d = 130;
    System.out.println(a==b); //true
    System.out.println(c==d); //false
}

这种行为使我困惑。谁能解释一下呢?

2 个答案:

答案 0 :(得分:3)

Java有IntegerCache缓存存储在-128和127之间的所有值。

120< 127因此它在缓存中但是130> 127因此它不在缓存中,Java的AutoBoxing将为该

创建一个新的Integer实例

答案 1 :(得分:0)

如果你把测试改为:

,那么David Xu是对的
Integer a = new Integer(120);
Integer b = new Integer(120);
Integer c = new Integer(130);
Integer d = new Integer(130);
System.out.println(a==b); //false
System.out.println(c==d); //false

您将获得双重错误,因为new关键字每次都会创建一个新的Integer对象,因此会绕过缓存。