天天看點

Java -- 每日一問:int 和 Integer 有什麼差別?

Java -- 每日一問:int 和 Integer 有什麼差別?

典型回答

int 是我們常說的整形數字,是 Java 的 8 個原始資料類型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。Java 語言雖然号稱一切都是對象,但原始資料類型是例外。

Integer 是 int 對應的包裝類,它有一個 int 類型的字段存儲資料,并且提供了基本操作,比如數學運算、int 和字元串之間轉換等。在 Java 5 中,引入了自動裝箱和自動拆箱功能(boxing/unboxing),Java 可以根據上下文,自動進行轉換,極大地簡化了相關程式設計。

關于 Integer 的值緩存,這涉及 Java 5 中另一個改進。建構 Integer 對象的傳統方式是直接調用構造器,直接 new 一個對象。但是根據實踐,我們發現大部分資料操作都是集中在有限的、較小的數值範圍,因而,在 Java 5 中新增了靜态工廠方法 valueOf,在調用它的時候會利用一個緩存機制,帶來了明顯的性能改進。按照 Javadoc,這個值預設緩存是 -128 到 127 之間。

高手回答

JDK1.5引入了自動裝箱與自動拆箱功能,Java可根據上下文,實作int/Integer,double/Double,boolean/Boolean等基本類型與相應對象之間的自動轉換,為開發過程帶來極大便利。

最常用的是通過new方法建構Integer對象。但是,基于大部分資料操作都是集中在有限的、較小的數值範圍,在JDK1.5 中新增了靜态工廠方法 valueOf,其背後實作是将int值為-128 到 127 之間的Integer對象進行緩存,在調用時候直接從緩存中擷取,進而提升建構對象的性能,也就是說使用該方法後,如果兩個對象的int值相同且落在緩存值範圍内,那麼這個兩個對象就是同一個對象;當值較小且頻繁使用時,推薦優先使用整型池方法(時間與空間性能俱佳)。

2 注意事項