揭開Java 中基元類型的持久性
儘管在Java 5 中引入了自動裝箱和拆箱,基元類型仍然在Java 中佔據一席之地。許多項目。這就提出了一個問題:為什麼開發人員仍然偏好基本類型而不是物件對應類型,例如 java.lang.Integer。
正如 Joshua Bloch 在他的開創性著作《Effective Java》中所概述的那樣,過多的物件創建可能會導致有損性能。以下程式碼示範了這一點:
public static void main(String[] args) { Long sum = 0L; for (long i = 0; i <= Integer.MAX_VALUE; i++) { sum += i; } System.out.println(sum); }
此程式碼使用 Long 對象,執行大約需要 43 秒。然而,將 Long 轉換為其原始類型 long 可以將執行時間減少到僅 6.8 秒。
另一個考慮因素是 Java 中缺乏本機值相等性。雖然物件相等性是使用 equals() 方法執行的,但原始類型使用 == 運算符,它提供了一種更簡潔、更有效的方法來檢查相等性。考慮以下範例:
class Biziclop { public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); System.out.println(new Integer(500) == new Integer(500)); System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); } }
輸出顯示在 [-128; 範圍內] 127],由於 JVM 緩存,原始類型對於相等性檢查傳回 true。然而,超出這個範圍,就會創建對象,從而導致錯誤的結果。這種快取行為可能會在相等性檢查中引入不一致,而基本類型可以避免這種情況。
因此,雖然自動裝箱和拆箱提供了便利,但基本類型的性能優勢和高效的相等性檢查仍然使它們成為Java 開發中的可行選擇,即使在需要Java 5 或更高版本的項目中也是如此。
以上是為什麼 Java 開發人員仍然喜歡原始類型而不是包裝類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!