2013-11-20 59 views
4

在我的計算機科學課程中,我們被告知當您創建一個數組時,JVM會根據數組的大小自動分配內存。例如,如果您創建一個大小爲10的整數數組,則JVM將爲該數組分配10 * 32位的數據。對象數組的內存分配

我的問題是,當您創建具有不同大小的對象數組時,此過程如何工作?例如一個String對象。當你創建一個10字符串的數組時,是系統中爲這些字符串保留的任何內存,還是因爲它們只是指針,內存分配是不必要的?

+0

你實際上構建了一個指針數組,這是正確的。所以你需要sizeof(指針)* array_size。實例化要鏈接到數組索引的對象需要注意對象的實際內存分配。 – schlingel

+2

這個問題相當多的答案你的http://stackoverflow.com/questions/5564423/arrays-in-java-and-how-they-are-stored-in-memory –

+0

其實,在Java中,只有一種具有可變大小的對象:數組。其他的都有預定的大小(String在內部保存一個數組)。 – Durandal

回答

3

由於String是擴展Object類的類,並且Java中的對象通過引用傳遞(並存儲在變量中),所以字符串數組是對String對象的引用的數組。所以,當你做

String[] a = new String[10]; 

你創建引用數組,其中每一個參考值(非它指向的對象)的大小是已知的(32位的32位機和64位對於64位機器)。

UPD:爲喬恩斯基特說in one of his answers的實際參考的大小可能同一個本地指針大小,但它不能保證。

2

int[] =>數組int型

String [] =>數組的指針到String實例

int[][] =>數組指針與(單獨的,不同的)INT []數組

0

數組是本身Java中的一個對象,所以它將始終在運行時創建。 From Official tutorial

創建數組的一種方法是使用new運算符。 ArrayDemo程序中的下一個 語句爲10個整數元素分配一個具有足夠內存的數組,並將該數組指定給anArray 變量。

//創建整數

數組

anArray =新INT [10];

如果 語句丟失,那麼編譯器打印以下像 一個錯誤,編譯失敗:

ArrayDemo.java:4:變量anArray可能沒有被初始化。

還有另一個answer in StackOverflow