[英]comparison if statment should be called twice but it is only called once when comparing an Integer
我有一個 function 需要一個 Integer 數組和一個 boolean 數組。 如果 Integer 數組中的值是最大值,並且 boolean 數組為真,則將 trackerArray 中的值設置為真。 這是我的代碼的簡化版本,會產生錯誤...
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
,它比較 ZA866CFD6331C4BEB268 參考文獻。 您當前的代碼字面意思是“200 的第二個實例與 200的第一個實例相同”
兩種選擇:
int
即int iHighestSum = 0;
Java 將自動拆箱Integer 以獲取其 int 值,然后您將比較ints
,因此使用==
是有效的equals()
: if(integerArray[c].equals(iHighestSum))
作為一個有趣的旁注,如果您將值200
更改為127
(或更少),您的代碼將通過。 This is because the JVM keeps fixed, reusable Objects inside the Integer class for all values between -128 and 127 (ie a "byte"), ie Integer[] integerArray = new Integer[] { 75, 127, 75, 127, 75 };
通過!
所以總而言之,這些更改中的任何一個都會使您的代碼 function 正確:
...
int iHighestSum = 0;
...
if(integerArray[c].equals(iHighestSum))
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.