[英]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具有原始类型( int
, byte
, double
等),并且在需要对象的情况下还具有与它们相对应的引用类型(对象)。 您的代码执行a[0] = 138;
在Integer
实例内将原始值138自动装箱。
intValue
返回Integer
实例包含的原始int
。 Integer.valueOf
用于获取Integer
实例(从int
或String
-在您的情况下,将通过自动拆箱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.