[英]Java Primitive Types: int vs. Integer
簡短回答: int
是一個數字; Integer
是一個可以引用包含數字的對象的指針。 使用Integer
進行算術會涉及更多CPU周期並消耗更多內存。 int
不是一個對象,不能傳遞給任何需要對象的方法(就像你對Generics所說的那樣)。
非基元類型是對象。 它們必須動態分配,垃圾收集並檢查null-ness(盡管其中一些操作可能會被優化編譯器刪除)。 讀取它們的實際值需要從指針加載。 原始類型是值。 它們通常占用較少的空間並且訪問速度更快。
一個好的經驗法則是,使用原始類型, 除非你需要多態,在這種情況下使用相應的對象。
在類型之間進行轉換( 自動裝箱 )會有輕微的損失。 int
也會有更少的開銷,所以如果可以的話我會一直使用int
。
另請參閱此問題: 何時使用原語和Java中的引用類型
在Java中, int
是原始數據類型,而Integer
是Wrapper類。
int
,作為原始數據類型具有較小的靈活性。 我們只能在其中存儲整數的二進制值。 由於Integer
是int
數據類型的包裝類,因此它為我們提供了更大的存儲,轉換和操作整數數據的靈活性。 Integer
是一個類,因此它可以調用class
定義的各種內置方法。 Integer
類型的變量存儲對Integer
對象的引用,就像任何其他引用(對象)類型一樣。
您可以在此處找到更詳細的說明。
作為一個OO純粹主義者,你可能會完全避開這些原語,並且會損害性能成本和缺乏后綴運算符。 (是的,有性能成本。)您也可以簡單地從作為設計者的可擴展性考慮中采用這種方法(不必一直掛在純度上。)
作為一個實際問題(在理論和美學問題之外),盡可能使用基元,並使用不能使用基元的對象版本。 (您已經提到了一個這樣的案例。語言和API將推動這一決定。)
作為一個表演怪胎,你可能會避開對象版本,如果你踩到一些OO黃金法則和神聖不可避免的話,你可能不會太在意:表現為王,你做出相應的決定。
我建議選擇2作為一個好的開始,直到你開發自己的教條偏好! :)
我的觀點:使用Integer作為參數或返回值允許原始int不允許的一件事:使用null
。 但這是個好主意嗎? 我認為它很少。
就性能而言:編譯器會在一定程度上優化您的代碼,因此大多數時候這不是真正的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.