Java 比较整数时出现奇怪的错误
我有一个奇怪的错误,首先是这个类给了我错误Java 比较整数时出现奇怪的错误,java,android,integer,int,compare,Java,Android,Integer,Int,Compare,我有一个奇怪的错误,首先是这个类给了我错误 public class SpeciePesci { public static final SpeciePesce[] specie = (new SpeciePesce[]{ new SpeciePesce(13,"Trota fario", R.drawable.specie_trota_fario, R.string.specie_descrizione_trota_fario), new SpeciePesce(14,"T
public class SpeciePesci {
public static final SpeciePesce[] specie = (new SpeciePesce[]{
new SpeciePesce(13,"Trota fario", R.drawable.specie_trota_fario, R.string.specie_descrizione_trota_fario),
new SpeciePesce(14,"Trota iridea", R.drawable.specie_trota_iridea, R.string.specie_descrizione_trota_iridea),
new SpeciePesce(4,"Trota marmorata", R.drawable.specie_trota_marmorata, R.string.specie_descrizione_trota_marmorata),
new SpeciePesce(15,"Trota lacustre", R.drawable.specie_trota_lacustre, R.string.specie_descrizione_trota_lacustre),
new SpeciePesce(195,"Salmerino alpino", R.drawable.specie_salmerino_alpino, R.string.specie_descrizione_salmerino_alpino),
new SpeciePesce(18,"Salmerino di fonte", R.drawable.specie_salmerino_fonte, R.string.specie_descrizione_salmerino_fonte),
new SpeciePesce(19,"Carpa", R.drawable.specie_carpa, R.string.specie_descrizione_carpa),
new SpeciePesce(20,"Tinca", R.drawable.specie_tinca, R.string.specie_descrizione_tinca),
new SpeciePesce(16,"Temolo", R.drawable.specie_temolo, R.string.specie_descrizione_temolo),
new SpeciePesce(22,"Persico reale", R.drawable.specie_persico_reale, R.string.specie_descrizione_persico_reale),
new SpeciePesce(21,"Lucio", R.drawable.specie_lucio, R.string.specie_descrizione_lucio)
});
public static Integer getPosition(Integer id){
Integer pos= -1;
if(195==195){
Log.d("INT==","195==195 ?? OK");
}
if(id==195){
Log.d("INT==","ID==195 ?? OK");
}
for (int i = 0; i < specie.length; i++) {
if(specie[i].getId()==195){
Log.d("INT==","getID==195 ?? OK");
}
Log.d("INT==",""+specie[i].getId()+"=="+id);
if (specie[i].getId()==id ) {
Log.d("INT==","OK");
pos = i;
break;
}
}
return pos;
}
}
当我调用getPosition(X)方法时,假设我接收到具有该Id的项的数组中的位置;在此之前,它很简单,除了195之外,它对所有ID都很有效。当它比较195==195时,它给了我假。。可能是什么
正如我所看到的,我记录了各种情况,结果如下
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 195==195 ?? OK
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ ID==195 ?? OK
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 13==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 14==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 4==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 15==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ getID==195 ?? OK
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 195==195 << suppose the loop stop here
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 18==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 19==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 20==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 16==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 22==195
05-23 14:30:28.665 560-560/com.evosw.altosarca D/INT==﹕ 21==195
可能是什么这是因为您没有使用原语
int
类型。您使用的是referenceInteger
类型。您的getPosition()
方法返回Integer
当使用==
运算符比较两个引用时,实际上是比较它的引用,而不是它的值。如果要检查两个对象是否有意义地相等,请使用equals()
但请注意,如果要比较的两个整数都小于128,则比较应返回true。
注意:
Integer a = 101;
Integer b = 101;
Integer c = 1234;
Integer d = 1234;
Integer e = a;
System.out.println(a==b); //true - same reference; for explanation read the attached link
System.out.println(a==e); //true - same reference; 'e' referencing 'a'
System.out.println(c==d); //false - diffrent reference
System.out.println(c.equals(d)); //true - meaningfully equals
您可以阅读以了解更多详细信息。我确实发现了数字大于127的错误,因此从128和更高的数字中,我有这个错误。。。。uhmm@Jonik,谢谢你找到它。这是我刚刚纠正的一个打字错误。
05-23 14:35:30.068 3153-3153/com.evosw.altosarca D/INT==﹕ 195==195 ?? OK
05-23 14:35:30.068 3153-3153/com.evosw.altosarca D/INT==﹕ 13==13
05-23 14:35:30.068 3153-3153/com.evosw.altosarca D/INT==﹕ OK
05-23 14:35:30.103 3153-3153/com.evosw.altosarca D/INT==﹕ 195==195 ?? OK
05-23 14:35:30.103 3153-3153/com.evosw.altosarca D/INT==﹕ 13==13
05-23 14:35:30.103 3153-3153/com.evosw.altosarca D/INT==﹕ OK
05-23 14:35:30.103 3153-3153/com.evosw.altosarca D/INT==﹕ 195==195 ?? OK
05-23 14:35:30.103 3153-3153/com.evosw.altosarca D/INT==﹕ 13==13
05-23 14:35:30.103 3153-3153/com.evosw.altosarca D/INT==﹕ OK
Integer a = 101;
Integer b = 101;
Integer c = 1234;
Integer d = 1234;
Integer e = a;
System.out.println(a==b); //true - same reference; for explanation read the attached link
System.out.println(a==e); //true - same reference; 'e' referencing 'a'
System.out.println(c==d); //false - diffrent reference
System.out.println(c.equals(d)); //true - meaningfully equals