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

为什么(整数)222!=Java中的(整数)222?,java,integer,equals,equality,Java,Integer,Equals,Equality,它适用于(Integer)1==(Integer)1,这似乎是合法的 那么为什么它会偏离(Integer)222的等式呢?Integer是一个类。因此,要比较对象,需要使用equals而不是= 短整数的实际情况是,如果使用valueOf方法获得Integer,则对于-128和127之间的值,始终会得到相同的缓存实例。因此在本例中,==起作用 如果不使用valueOf而使用操作符new显式创建一个新实例,则此操作无效 为了更清楚,我写了valueOf的当前实现 public static Int

它适用于
(Integer)1==(Integer)1
,这似乎是合法的


那么为什么它会偏离
(Integer)222
的等式呢?

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

短整数的实际情况是,如果使用
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);
}
公共静态整数值(int i){
最终整数偏移=128;

如果(i>=-128&&i,但它对(整数)1==(整数)为真1?检查更新的答案有趣-1查看正确答案我没有否决,但人们也否决了回答不应该回答的问题的人-在这种情况下,因为这是一个明显的重复。是的,但否决正确答案总是一种不好的行为。最好是投票结束问题,而不是否决一个问题只是不要使用==“因为它适用于这种情况”,你是在比较对象,所以使用equals。