为啥 (Integer) 222 != (Integer) 222 在 Java 中? [复制]

Posted

技术标签:

【中文标题】为啥 (Integer) 222 != (Integer) 222 在 Java 中? [复制]【英文标题】: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。 【参考方案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 以获得正确答案 我没有投反对票,但人们也对回答不应回答的问题的人投反对票 - 在这种情况下,因为它显然是重复的。 是的,但对正确答案投反对票总是一种不好的行为。更好的是投票结束问题,而不是否决正确答案。

以上是关于为啥 (Integer) 222 != (Integer) 222 在 Java 中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

遍历map和删除map中的一个entry

关于Integer的==小发现(非常好玩和易错)

Integer引用类型问题

利用队列实现栈

java中String,int,Integer,chardouble类型转换

Java中int integer相互如何 转换