簡體   English   中英

Java原語類型:int與Integer

[英]Java Primitive Types: int vs. Integer

我很困惑何時在Java中使用原始與非原始(?)類型(即int與Integer)。 我意識到在某些地方你不能使用原始類型(例如在使用泛型時 )。 但是在“普通”代碼中呢? 使用非原始類型會有性能損失嗎? 使用Android時怎么樣?

***我的問題與這個問題非常相似,這個問題是由以下海報之一發現的。 相關問題的答案提供了對此問題的更多見解,這些問題未在下面介紹。

***“非原始”類型被官方稱為引用類型。

簡短回答: int是一個數字; Integer是一個可以引用包含數字的對象的指針。 使用Integer進行算術會涉及更多CPU周期並消耗更多內存。 int不是一個對象,不能傳遞給任何需要對象的方法(就像你對Generics所說的那樣)。

非基元類型是對象。 它們必須動態分配,垃圾收集並檢查null-ness(盡管其中一些操作可能會被優化編譯器刪除)。 讀取它們的實際值需要從指針加載。 原始類型是值。 它們通常占用較少的空間並且訪問速度更快。

一個好的經驗法則是,使用原始類型, 除非你需要多態,在這種情況下使用相應的對象。

在類型之間進行轉換( 自動裝箱 )會有輕微的損失。 int也會有更少的開銷,所以如果可以的話我會一直使用int

另請參閱此問題: 何時使用原語和Java中的引用類型

在Java中, int是原始數據類型,而Integer是Wrapper類。

int ,作為原始數據類型具有較小的靈活性。 我們只能在其中存儲整數的二進制值。 由於Integerint數據類型的包裝類,因此它為我們提供了更大的存儲,轉換和操作整數數據的靈活性。 Integer是一個類,因此它可以調用class定義的各種內置方法。 Integer類型的變量存儲對Integer對象的引用,就像任何其他引用(對象)類型一樣。

您可以在此處找到更詳細的說明。

作為一個OO純粹主義者,你可能會完全避開這些原語,並且會損害性能成本和缺乏后綴運算符。 (是的,有性能成本。)您也可以簡單地從作為設計者的可擴展性考慮中采用這種方法(不必一直掛在純度上。)

作為一個實際問題(在理論和美學問題之外),盡可能使用基元,並使用不能使用基元的對象版本。 (您已經提到了一個這樣的案例。語言和API將推動這一決定。)

作為一個表演怪胎,你可能會避開對象版本,如果你踩到一些OO黃金法則和神聖不可避免的話,你可能不會太在意:表現為王,你做出相應的決定。

我建議選擇2作為一個好的開始,直到你開發自己的教條偏好! :)

我的觀點:使用Integer作為參數或返回值允許原始int不允許的一件事:使用null 但這是個好主意嗎? 我認為它很少。

就性能而言:編譯器會在一定程度上優化您的代碼,因此大多數時候這不是真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM