【问题标题】:Comparison with == in Java [duplicate]与Java中的==比较[重复]
【发布时间】:2014-08-09 19:18:55
【问题描述】:
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
}

这种行为让我很困惑。谁能解释一下?

【问题讨论】:

  • 不要使用 box'ed 对象,将 Integer 更改为 int 你会看到你所期望的
  • @DmitryFucintv Java 中==equals 的行为以及整数缓存都在许多答案中进行了多次解释。这很可能是您得到几票反对的原因。

标签: java comparison


【解决方案1】:

Java 有一个IntegerCache,它可以缓存存储在 -128 和 127 之间的所有值。

120 127 所以它不在缓存中,Java 的 AutoBoxing 会为此创建一个新的 Integer 实例

【讨论】:

    【解决方案2】:

    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 对象,因此会绕过缓存。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多