比较两个整数的值

时间:2012-04-23 17:48:52

标签: java arrays comparison integer

我想比较两个Integer类型数组的值。当我比较它们的确切值时,我得到错误的答案,当我将它们与Arrays.equals进行比较时得到正确答案:

    Integer a[]=new Integer[2];
    Integer b[]=new Integer[2];
    a[0]=138;
    a[1]=0;
    b[0]=138;
    b[1]=0;
    boolean c;
    c=a[0]==b[0];//c is false
    c=Integer.valueOf(a[0])==Integer.valueOf(b[0]);//c is false
    c=Arrays.equals(a, b);//c is true

3 个答案:

答案 0 :(得分:5)

你正在寻找intValue,而不是Integer.valueOf(虽然很容易看出你如何让他们感到困惑!):

c = a[0].intValue() == b[0].intValue();

Java具有基本类型(intbytedouble等),并且还针对需要对象的情况引用与它们对应的类型(对象)。执行a[0] = 138;的代码会在Integer实例中自动装箱原始值138。

intValue返回int实例包含的原语IntegerInteger.valueOf用于获取Integer个实例(来自intString - 在您的情况下,它会自动使用valueOf(int)装箱Integer参考号。)

你也可以这样做:

c = (int)a[0] == (int)b[0];

...会触发自动拆箱。

有关拳击(包括自动装箱和取消装箱)的更多信息,请参见the specification

答案 1 :(得分:2)

您正在代码中进行隐式类型转换(自动装箱)。

该行:

a[0]=138;

实际上翻译为:

a[0] = Integer.valueOf(138);

创建Integer实例。问题是这个方法将整数从0缓存到127并为高于127的值创建新实例,因此== compare返回false。

请注意,[0]的实际类型是整数,因此您可以编写

c=a[0].equals(b[0]);

将返回true。

答案 2 :(得分:0)

由于数组,我认为内部值不会自动取消装箱。如果你有一个int[]而不是Integer[]

,这可能会有用