簡體   English   中英

使用 int 與 Integer

[英]Using int vs Integer

我遇到了一個使用整數變量來捕獲要在 for 循環中使用的大小的類。 這是一種好的做法還是我們應該使用 int 原始數據類型?

Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j) 

提供了 Integer 類,以便可以以純 OO 方式對值進行裝箱/拆箱。 在適當的情況下使用 int ,除非您特別需要以 OO 方式使用它; 在這種情況下,整數是合適的。

Java 整數與整數

但是,這里的幕后正在發生非常不同的事情。 int 是一個數字; an > Integer 是可以引用包含數字的對象的指針。

...

int 不是對象,不能傳遞給任何需要對象的方法。 一個常見的情況是使用提供的集合類( List 、 Map 、 Set )——盡管可以編寫這些類的版本來提供與對象版本類似的功能。 每當使用自省(例如在反射 API 中)時,經常需要包裝類( Integer 、 Double 等)。

關於何時使用一個與另一個的更好描述:

在 int 和 Integer 之間進行選擇

在詳細說明原因之前,我將從如何使用這些類型開始。

  • 出於性能原因首選int
  • 采用對象的方法(包括像List<T>這樣的泛型類型)將隱含地需要使用Integer
  • 對於Integer (-128 到
  1. 因為實習 - 使用Integer.valueOf(int)而不是 new Integer(int)
  • 不要將==!=與整數類型一起使用
  • 當您需要表示不存在值(null)時,請考慮使用Integer
  • 小心將整數值拆箱為具有空值的 int

如果您可以使用int ,請這樣做。 如果值可以為null或用作對象,例如泛型,請使用Integer

通常使用哪一個並不重要,但通常int性能稍好一些。

這種方法在實踐中並不好,盡可能使用int Integer的使用表明這個特定的變量可以為null (或者它在一個集合中,該死的泛型......) - 事實並非如此。

使用Integer還會帶來額外的裝箱和拆箱開銷。

這是在大型項目中等待發生的潛在災難。 這里的編碼器忘記了每個 Integer 實際上是一個新對象,並且,要將其用作 int,必須一直進行裝箱和拆箱。 它不僅效率低下,而且也不會按預期運行。 最好建議您始終盡可能使用 int,並且僅使用 Integer 將這些值放入列表、容器或用於數據庫存儲。 請記住,使用 >、< 和 == 比較對象的含義與使用相同的運算符比較原語不同。

總是盡可能地提升原始類型。

原始類型不能用作 GenericArgument 或 null。

不要只用它來循環。 使用原始類型 int(性能更好),它與 Class Integer 不同。

Integer 類將原始類型 int 的值包裝在一個對象中。 Integer 類型的對象包含一個類型為 int 的字段。

此外,該類提供了幾種將 int 轉換為 String 和 String 轉換為 int 的方法,以及在處理 int 時有用的其他常量和方法。

因此,如果您需要調用 Integer 函數或需要為其分配空值,請使用 Integer。

對於 List 等泛型,您還需要使用 Integer 而不是 int

當需要使用對象時,您必須使用 Wrapper 類,如 Integer、Double、Float 等...

例如:

 int n = Integer.parseInt("10");

這里我們將字符串轉換為整數(原始類型),但方法 parseInt(String str) 僅適用於 Wrapper 類(即 Object),所以我們使用了它……你會發現它在 java 中的更多用途。

由於裝箱和拆箱可能會導致性能損失,因為您會產生在原始類型和引用類型之間進行轉換的開銷。

但是,Integer 類添加了非常有用的其他方法。

您不能將 == 或 != 與 Integer 類型一起使用,因為它會比較它們的“指針位置”。

為了啟動自動拆箱,至少其中一個元素必須是 int。

如果您正在比較 Integer1 == Integer2,實際發生的情況是 Object.equals 被調用為: Integer1.equals(Integer2) (除非被覆蓋)比較引用。

(這是對@Muhammad Shahab 的回復,但我還不能添加評論)

由於純粹的面向對象,我通常使用整數。 int 的性能絕對比它的對應對象好得多,但只有當你在循環中循環數百萬次時才會注意到它。

恕我直言,如果性能在您的應用程序中至關重要,並且您甚至想壓縮一納秒,那么請在沒有任何大腦的情況下使用 int 。 但是,如果主要關注 OO 和可讀性,則使用 Integer。

暫無
暫無

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

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