簡體   English   中英

比較語句是否應該被調用兩次,但在比較 Integer 時只調用一次

[英]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的第一個實例相同

兩種選擇:

  1. 將 iHighestSum 更改為intint iHighestSum = 0; Java 將自動拆箱Integer 以獲取其 int 值,然后您將比較ints ,因此使用==是有效的
  2. 將比較更改為使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM