【问题标题】:Why (Integer) 222 != (Integer) 222 in Java? [duplicate]为什么 (Integer) 222 != (Integer) 222 在 Java 中? [复制]
【发布时间】:2016-05-26 08:52:51
【问题描述】:

(Integer) 1 == (Integer) 1 也是如此,这似乎是合法的。

那么,为什么它对(Integer) 222 的相等性进行了偏移?

【问题讨论】:

  • 只是不要使用 == "因为它适用于这种情况",你是在比较对象,所以使用 equals。

标签: java integer equals equality


【解决方案1】:

Integer 是一个类。因此,要比较对象,您需要使用 equals 而不是 ==

使用较短的 Integer 实际发生的情况是,如果您使用 valueOf 方法获得 Integer,则对于 -128 和 127 之间的值,您始终会获得相同的缓存实例。所以在这种情况下,== 有效。

如果您不使用valueOf 而是使用运算符new 显式创建一个新实例,则它不起作用。


为了更清楚,我写了 valueOf 的当前实现

public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache
        return IntegerCache.cache[i + offset];
    }
    return new Integer(i);
}

【讨论】:

  • 但它适用于 (Integer) 1 == (Integer) 1 ?
  • 检查更新的答案
  • 有趣的 -1 以获得正确答案
  • 我没有投反对票,但人们也对回答不应回答的问题的人投反对票 - 在这种情况下,因为它显然是重复的。
  • 是的,但对正确答案投反对票总是一种不好的行为。更好的是投票结束问题,而不是否决正确答案。
猜你喜欢
  • 2015-09-15
  • 1970-01-01
  • 2015-05-29
  • 2013-08-09
  • 2020-01-26
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多