在我的計算機科學課程中,我們被告知當您創建一個數組時,JVM會根據數組的大小自動分配內存。例如,如果您創建一個大小爲10的整數數組,則JVM將爲該數組分配10 * 32位的數據。對象數組的內存分配
我的問題是,當您創建具有不同大小的對象數組時,此過程如何工作?例如一個String對象。當你創建一個10字符串的數組時,是系統中爲這些字符串保留的任何內存,還是因爲它們只是指針,內存分配是不必要的?
在我的計算機科學課程中,我們被告知當您創建一個數組時,JVM會根據數組的大小自動分配內存。例如,如果您創建一個大小爲10的整數數組,則JVM將爲該數組分配10 * 32位的數據。對象數組的內存分配
我的問題是,當您創建具有不同大小的對象數組時,此過程如何工作?例如一個String對象。當你創建一個10字符串的數組時,是系統中爲這些字符串保留的任何內存,還是因爲它們只是指針,內存分配是不必要的?
由於String
是擴展Object
類的類,並且Java中的對象通過引用傳遞(並存儲在變量中),所以字符串數組是對String
對象的引用的數組。所以,當你做
String[] a = new String[10];
你創建引用數組,其中每一個參考值(非它指向的對象)的大小是已知的(32位的32位機和64位對於64位機器)。
UPD:爲喬恩斯基特說in one of his answers的實際參考的大小可能同一個本地指針大小,但它不能保證。
int[]
=>數組int型
String []
=>數組的指針到String實例
int[][]
=>數組指針與(單獨的,不同的)INT []數組
數組是本身Java中的一個對象,所以它將始終在運行時創建。 From Official tutorial:
創建數組的一種方法是使用new運算符。 ArrayDemo程序中的下一個 語句爲10個整數元素分配一個具有足夠內存的數組,並將該數組指定給anArray 變量。
//創建整數
數組anArray =新INT [10];
如果 語句丟失,那麼編譯器打印以下像 一個錯誤,編譯失敗:
ArrayDemo.java:4:變量anArray可能沒有被初始化。
還有另一個answer in StackOverflow。
你實際上構建了一個指針數組,這是正確的。所以你需要sizeof(指針)* array_size。實例化要鏈接到數組索引的對象需要注意對象的實際內存分配。 – schlingel
這個問題相當多的答案你的http://stackoverflow.com/questions/5564423/arrays-in-java-and-how-they-are-stored-in-memory –
其實,在Java中,只有一種具有可變大小的對象:數組。其他的都有預定的大小(String在內部保存一個數組)。 – Durandal