java comparison if station应该调用两次,但在比较整数时只调用一次
我有一个接受整数数组和布尔数组的函数。如果整数数组中的值是最高值,而布尔数组为true,则trackerArray中的值将设置为true。这是我的代码的简化版本,它会产生错误
package com.thisis.a.test;
public class ThisIsATest {
public static void main(String[] args){
Integer[] integerArray = new Integer[]{75,200,75,200,75};
boolean[] booleanArray = new boolean[]{false,true,false,true,false};
boolean[] trackerArray = new boolean[]{false,false,false,false,false};
Integer iHighestSum = 0;
for(int c = 0; c < booleanArray.length; c++){
if(booleanArray[c] == true)
if(integerArray[c] > iHighestSum)
iHighestSum = integerArray[c];
}
for(int c = 0; c < booleanArray.length; c++){
if(booleanArray[c] == true)
if(integerArray[c] == iHighestSum)
trackerArray[c] = true; // this if statement should be called twice
}
// trackerArray should be {false,true,false,true,false}
// instead it is {false,true,false,false,false}
}
}
trackerArray应该是{false,true,false,true,false},而不是{false,true,false,false}。if station应该触发两次,但只触发一次。这是为什么
# 1 楼答案
应该使用比较值的
Integer.equals()
,而不是比较对象引用的Integer == Integer
。您当前的代码字面上是“200的第二个实例是否与200的第一个实例相同?”有两种选择:
int
即int iHighestSum = 0;
Java将auto-unbox整数以获取其int值,然后您将比较ints
,因此使用==
是有效的equals()
:if(integerArray[c].equals(iHighestSum))
有趣的是,如果将值
200
更改为127
(或更小),代码就会通过。这是因为JVM在Integer类中为-128和127(即“字节”)之间的所有值(即Integer[] integerArray = new Integer[] { 75, 127, 75, 127, 75 };
传递)保留固定的、可重用的对象总之,以下任何一项更改都将使代码正常运行: