【发布时间】:2016-05-26 08:52:51
【问题描述】:
(Integer) 1 == (Integer) 1 也是如此,这似乎是合法的。
那么,为什么它对(Integer) 222 的相等性进行了偏移?
【问题讨论】:
-
只是不要使用 == "因为它适用于这种情况",你是在比较对象,所以使用 equals。
标签: java integer equals equality
(Integer) 1 == (Integer) 1 也是如此,这似乎是合法的。
那么,为什么它对(Integer) 222 的相等性进行了偏移?
【问题讨论】:
标签: java integer equals equality
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);
}
【讨论】: