2012-12-04 53 views

回答

2

這就是所謂的在java中auto-boxing

正如任何Java程序員所知道的,您不能將int(或其他原始值)放入集合中。集合只能保存對象引用,所以你必須將原始值裝入適當的包裝類(在int情況下爲Integer)。當你把對象從集合中取出時,你得到了你放入的Integer;如果您需要int,則必須使用intValue方法取消Integer。所有這些拳擊和拆箱都是一件痛苦的事情,並且會讓你的代碼混亂不堪。自動裝箱和取消裝箱功能可自動執行此過程,消除疼痛和混亂。

Link

1

ArrayList中只能存儲對象。 int是一個原始數據類型,因此它對對象的等價物是「自動裝箱」的。這隻發生在Java 5之前,你必須自己填寫Integer。

1

自動裝箱發生,因爲集合只能保持對象不是原語。如果你需要一個int基元,你必須在讀出它時用intValue()方法取消它。

0

這是java 1.5引入的java語言特性。它被稱爲自動裝箱

粗略地說,它在Java基本類型之間轉換爲它們相應的包裝類類型。編譯器檢測何時需要收件箱(原始到包裝器)或發件箱(包裝到原始),並將表達式擴展爲正確的字節碼。

因此,在幕後,當您添加int時,會將Integer的實例添加到列表中。

0

請閱讀有關引用類型和值類型的更多信息以更好地理解此內容。

ArrayList僅保存對對象的引用。它並不具有價值本身。

由於int是一個值類型,它沒有引用。當您將int轉換爲Integer時,您會在內存中爲Integer創建一些空間,該Integer包含一個int值,並且對您創建的Integer對象有一個引用。

現在你的ArrayList只是保存了Integer對象的地址,而不是保留整數本身。

認爲它是這樣的:在你的ArrayList 一個元件佔用的內存塊:200 你的Integer對象是存儲塊中:400。 在內存塊200中,不是保留整數的值,而是保持內存地址爲400.

原因,我不知道。我想他們只是決定這樣做,以保持簡單。

相關問題