gpt4 book ai didi

java - 比较 if 语句应该调用两次,但在比较 Integer 时只调用一次

转载 作者:行者123 更新时间:2023-12-01 17:35:37 24 4
gpt4 key购买 nike

我有一个函数,它接受一个整数数组和一个 boolean 数组。如果 Integer 数组中的值为最高值且 boolean 数组为 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,false}。 if 语句应该触发两次,但实际上它只触发一次。这是为什么?

最佳答案

您应该使用比较值的Integer.equals(),而不是比较对象引用的Integer == Integer。您当前的代码字面意思是“200 的第二个实例与 200 的第一个实例是相同的实例”

两个选项:

  1. 将 iHighestSum 更改为 intint iHighestSum = 0; Java 将 auto-unbox Integer 来获取其 int 值,然后您将比较 ints,因此使用 ==
  2. 是有效的
  3. 更改比较以使用 equals():if(integerArray[c].equals(iHighestSum))

有趣的是,如果您将值 200 更改为 127(或更小),您的代码就会通过。这是因为 JVM 在 Integer 类中为 -128 到 127(即“字节”)之间的所有值保留固定的、可重用的对象,即 Integer[] integerArray = new Integer[] { 75, 127, 75, 127, 75 }; 通过!

总而言之,这些更改中的任何一个都将使您的代码正常运行:

...
int iHighestSum = 0;
...
if(integerArray[c].equals(iHighestSum))
...

关于java - 比较 if 语句应该调用两次,但在比较 Integer 时只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com