Java中为什么(整数)222!=(整数)222?

Sne*_*sne 2 java integer equality equals

这是正确的(Integer) 1 == (Integer) 1,这似乎是合法的.

那么为什么它要进行(Integer) 222平等游览 呢?

Dav*_*INO 8

Integer是一个班级.所以要比较你需要使用的对象equals而不是==

使用较短的Integer实际发生的情况是,如果您Integer使用该方法valueOf,则总是获得-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);
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是对于正确的答案,这总是一种不好的行为.更好的是投票结束这个问题,而不是投票给正确答案. (4认同)

归档时间:

查看次数:

1879 次

最近记录:

10 年,7 月 前