java中的整数文字

时间:2013-06-03 05:51:02

标签: java integer wrapper

        Integer i1 = 127;
        Integer i2 = 127;

        if(i1==i2){
            System.out.println("true"); //prints true
        }else{
            System.out.println("false");
        }

        Integer i3 = 128;
        Integer i4 = 128;

        if(i3==i4){
            System.out.println("true");
        }else{
            System.out.println("false"); //prints false
        }

为什么如果Integer值小于127则返回true,否则返回false。如果是原始值,则返回true。

或者如果我创建Integer i2 = new Integer(1);这总是返回false。

5 个答案:

答案 0 :(得分:10)

您正在检查身份。 Java保留一个整数池,介于-128和127之间。其他整数是动态创建的,因此它们彼此不同。正如@ sarwar026所说,你应该使用.equals()

答案 1 :(得分:1)

您应该使用.equals()代替==。在这种情况下,您的两个代码都应打印true

if(i1.equals(i2)){
    System.out.println("true");
}else{
    System.out.println("false");
}

答案 2 :(得分:1)

使用i1.equals(i2)与Integer进行比较

<强> WHY

因为当您使用==比较两个整数时,将比较参考对象而不是值。但是当你使用equals方法比较它们时,他们正在比较值

但是,为什么它在

之前有效

正如Elazar已经建议的那样,java使用256(-128到127)长整数池。 pool表示所有已定义的int都存储在某个“池”中。所以对于整数池的值,它返回true。但是,对于更大的值,动态创建整数,因此它不显示真实。

Primitive int怎么样

在原始类型中没有像上面那样的复杂性。因此,您始终可以使用==

比较两个基元

答案 3 :(得分:0)

使用Integer.equals()方法检查值是否相等。这是因为缓存了最多128个值。因此,JVM为您提供相同的对象,从而对象进行比较。但是大于128的值会创建一个新实例而不使用缓存的实例。

答案 4 :(得分:0)

首先,我们需要通过equals()进行检查,以便在引用的情况下比较值。 但是通过“==”,它会比较引用而不是它保留的值。

如果您在Integer类中查看以下方法,则可以知道。

public static Integer valueOf(int i) {
            assert IntegerCache.high >= 127;
             if (i >= IntegerCache.low && i <= IntegerCache.high)
                 return IntegerCache.cache[i + (-IntegerCache.low)];
             return new Integer(i);
         }

所以当值大于127时,它没有采用相同的参考。因此在第二种情况下结果是错误的。