![](/img/trans.png)
[英]Memory usage of Integer[] versus int[] : analysis using classmexer.jar
[英]using new(Integer) versus an int
在我的Java課程中,教授使用如下內容:
integerBox.add(new Integer(10));
這和剛做的一樣:
integerBox.add(10);
? 我用谷歌搜索了一下,但無法找到一種方式,而且教授含糊不清。 我能找到的最接近的解釋是:
int是一個數字; 整數是一個可以引用包含數字的對象的指針。
基本上,像Vector
, ArrayList
, HashMap
等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
類型的對象。 在自動裝箱出現之前,你不能像在這里那樣混合Integer
和int
。
所以外賣是:
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.