[Java基礎]Integer

Duancf發表於2024-08-01

在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 的範圍內,ij 都會引用同一個 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 的快取範圍,ij 會引用不同的 Integer 物件。

總結

  • 對於 -128 到 127 之間的整數,使用 Integer.valueOf 會返回快取中的物件例項,因此 i == jtrue
  • 對於超出 -128 到 127 範圍的整數,Integer.valueOf 會建立新的物件例項,因此 i == jfalse

如果要比較 Integer 物件的值,推薦使用 equals 方法,而不是 == 運算子:

System.out.println(i.equals(j)); // 比較值是否相等