为啥 (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 中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章