儘管 Java 5 中引入了裝箱和拆箱,開發人員仍然繼續在程式碼中使用原始類型。考慮到盒裝類型提供了額外的便利,這似乎違反直覺,但使用原語有幾個切實的好處。
效能注意事項
Joshua Bloch 的「Effective Java」亮點在簡單計算中使用 Long 而不是 long 的潛在效能影響。裝箱和拆箱操作涉及分配和取消分配對象,這可能會減慢程式碼執行速度。如提供的範例所示,使用原始類型可以顯著減少運行時間。
值相等
原始型別的另一個優點是它們原生的值相等概念。 == 運算子直接比較值,而裝箱類型上的 .equals() 方法需要額外的步驟和開銷。這可以使程式碼更加簡潔和高效,特別是在效能關鍵的場景中。
快取影響
在 Java 中,小整數值 ([-128; 127] )由 JVM 快取。這意味著為這些值返回完全相同的對象,與使用裝箱類型相比,這可以提高效能。但是,對於超出此範圍的值,會建立新對象,從而可能會引入不必要的對象開銷。
例如:「Biziclop」謎題
.equals( 的行為) 對於裝箱整數可能會令人困惑。考慮以下程式碼:
class Biziclop { public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); // false System.out.println(new Integer(500) == new Integer(500)); // false System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); // true System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); // false } }
為什麼第 (3) 行回傳 true 而第 (4) 行回傳 false?答案就在於快取機制。值 5 和 -5 由 JVM 緩存,因此 new Integer(5) 的兩個實例引用同一個物件。但是,500 不會被緩存,因此 new Integer(500) 的兩個實例是不同的物件。另一方面,Integer.valueOf() 使用包含所有整數的附加緩存,確保對於此緩存中的值(通常是 [-128; 127] 範圍內的所有整數),則傳回相同的物件。
以上是為什麼 Java 開發人員喜歡原始型別而不是包裝類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!