簡體   English   中英

使用new(整數)和int

[英]using new(Integer) versus an int

在我的Java課程中,教授使用如下內容:

integerBox.add(new Integer(10));

這和剛做的一樣:

integerBox.add(10);

我用谷歌搜索了一下,但無法找到一種方式,而且教授含糊不清。 我能找到的最接近的解釋是:

int是一個數字; 整數是一個可以引用包含數字的對象的指針。

基本上,像VectorArrayListHashMap等Java集合類不采用原始類型,如int

在過去的日子里(Java 5之前),你不能這樣做:

List myList = new ArrayList();
myList.add(10);

你必須這樣做:

List myList = new ArrayList();
myList.add(new Integer(10));

這是因為10本身就是一個int Integer是一個包裝int原語的類,並且創建一個new Integer()意味着你實際上正在創建一個Integer類型的對象。 在自動裝箱出現之前,你不能像在這里那樣混合Integerint

所以外賣是:

integerBox.add(10)integerBox.add(new Integer(10))將導致將Integer添加到integerBox ,但這只是因為integerBox.add(10)透明地為您創建了Integer 兩種方式可能不一定以相同的方式創建Integer ,因為一個用new Integer顯式創建,而autoboxing將使用Integer.valueOf() 我假設教程使integerBox成為某種類型的集合(它接受對象,而不是基元)。

但從這個角度來看:

int myInt = 10;
Integer myInteger = new Integer(10);

一個是原始的,另一個是Integer類型的對象。

integerBox.add(10);

相當於

integerBox.add(Integer.valueOf(10));

因此它可能會返回緩存的 Integer實例。

閱讀Java Specialist 191 ,了解設置自動裝箱緩存大小的各種方法。

另請參見: cache options

在這種情況下,是的。 我假設integerBox是一個對象的集合 - 你只能在integerBox中存儲對象。 這意味着您不能在集合中具有原始值,例如int。

然而,在Java 5發布之后,出現了一種叫做autoboxing的東西。 自動裝箱是自動將原始值轉換為對象的過程。 這是通過其中一個包裝類完成的 - Integer,Double,Character等(全部用大寫字母和與它們所代表的原始值相關的名稱命名)。

當您將int 10添加到集合(ArrayList,很可能)時,Java VIrtual Machine會在后台將其轉換為Integer類型的對象。

暫無
暫無

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

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