繁体   English   中英

比较两个整数的值

[英]comparing the values of two Integers

我想比较两个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

您正在寻找的是intValue ,而不是Integer.valueOf (尽管很容易看出来如何将它们弄糊涂!):

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

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

intValue返回Integer实例包含的原始int Integer.valueOf用于获取Integer实例(从intString -在您的情况下,将通过自动拆箱Integer引用来使用valueOf(int) )。

您也可以这样做:

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

...这将触发自动拆箱。

规范中有关装箱(包括自动装箱和拆箱)的更多信息。

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

该行:

a[0]=138;

实际上转化为:

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

创建一个Integer实例。 问题在于,此方法将Integers从0缓存到127,并为大于127的值创建新实例,因此==比较返回false。

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

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

这将返回true。

由于存在数组,我认为内部值不会自动为您取消装箱。 如果您使用int[]而不是Integer[]这可能会起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM