在下面的代碼中,該行System.out.println(sumInteger(bigs) == sumInteger(bigs));顯示為 false。但是當我們再次比較另一個 Integer 包裝類System.out.println(bc == ab);時,它返回 true。為什么包裝類的比較在第一種情況下為假而在第二種情況下為真?import java.util.Arrays;import java.util.List;public class Arrays { public void array1() { List<Integer> bigs = Arrays.asList(100,200,300); System.out.println(sumInteger(bigs) == sum(bigs)); // 1. Output: true System.out.println(sumInteger(bigs) == sumInteger(bigs)); //2. Output: false Integer ab = 10; System.out.println(ab == 10); //3. Output: true Integer bc = 10; System.out.println(bc == ab); //4. Output: true } public static int sum (List<Integer> ints) { int s = 0; for (int n : ints) { s += n; } return s; } public static Integer sumInteger(List<Integer> ints) { Integer s = 0; for (Integer n : ints) { s += n; } return s; } public static void main(String[] args) { Array tm = new Array(); tm.array1(); }}
1 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
System.out.println(sumInteger(bigs) == sum(bigs)); // 1. ***Output: true System.out.println(sumInteger(bigs) == sumInteger(bigs)); //2. ***Output: false
sumInteger() 返回一個 Integer,而 sum() 返回一個 int,因此您正在測試 Integer 與 int 的相等性,這會導致 Integer 自動拆箱,因此您最終將 int 與 int 進行比較。兩個整數現在具有相同的值,因此為“真”。
sumInteger() 返回一個 Integer,再次調用 sumInteger() 返回一個 Integer。這兩個整數是單獨創建的對象,但都具有相同的內部值。當您使用“==”比較它們時,它會比較引用并查看每個對象是如何獨立創建的,引用不相等,因此為“假”。如果您想測試相等的值,您將需要使用 .equals() 方法。
添加回答
舉報
0/150
提交
取消