在Java中,Integer
類會對一些數值進行快取,這樣可以節省記憶體並提高效能。當你使用 Integer.valueOf(int)
方法來建立 Integer
物件時,對於數值在 -128 到 127 之間的整數,Java 會返回快取中的物件例項。因此,對於這些範圍內的整數,用 Integer.valueOf
建立的 Integer
物件實際上會引用同一個例項。
在你的示例程式碼中:
Integer i = Integer.valueOf(100);
Integer j = Integer.valueOf(100);
System.out.println(i == j);
由於100在 -128 到 127 的範圍內,i
和 j
都會引用同一個 Integer
物件。因此,i == j
會返回 true
。
但是,如果你使用超過這個範圍的整數,Integer.valueOf
會建立新的物件,因此它們的引用會不同。例如:
Integer i = Integer.valueOf(200);
Integer j = Integer.valueOf(200);
System.out.println(i == j); // 這將列印false
這是因為200超出了 -128 到 127 的快取範圍,i
和 j
會引用不同的 Integer
物件。
總結
- 對於 -128 到 127 之間的整數,使用
Integer.valueOf
會返回快取中的物件例項,因此i == j
為true
。 - 對於超出 -128 到 127 範圍的整數,
Integer.valueOf
會建立新的物件例項,因此i == j
為false
。
如果要比較 Integer
物件的值,推薦使用 equals
方法,而不是 ==
運算子:
System.out.println(i.equals(j)); // 比較值是否相等