當我們創建一個類型的對象時,新運算符在運行時分配內存。在java中創建數組時,新運算符會做什麼?
說
myclass obj1 = new myclass();
這裏myclass()
定義的myclass
但
int arr1[4] = new int[];
新分配的內存,但constructur,什麼int[]
這裏呢?
當我們創建一個類型的對象時,新運算符在運行時分配內存。在java中創建數組時,新運算符會做什麼?
說
myclass obj1 = new myclass();
這裏myclass()
定義的myclass
但
int arr1[4] = new int[];
新分配的內存,但constructur,什麼int[]
這裏呢?
您的代碼:
int arr1[4] = new int[];
將無法編譯。它應該是:
int arr1[] = new int[4];
把[]
數組名稱前被認爲是很好的做法,所以你應該做的:
int[] arr1 = new int[4];
一般
陣列創建爲:
type[] arrayName = new type[size];
的上面的部分[size]
指定要分配的數組的大小。
爲什麼我們在創建數組時使用
new
?
因爲Java中的數組是對象。上例中的數組arrayName
的名稱不是實際的數組,而只是一個參考。 new
運算符在堆上創建數組,並將引用返回給新創建的數組對象,然後將其分配給arrayName
。
新分配的內存,但是,這裏int []呢?
int[]
部分只是簡單地指定了新分配的內存應該具有的類型。
然而,由於陣列不能動態地擴展,它沒有任何意義寫new int[]
(即使您在聲明中指定int[4]
),你必須寫,要麼像這樣
int arr1[] = new int[4];
或類似這樣的
int arr1[] = {1, 2, 3, 4};
在JLS有關章節:
創建對象的實例。 new
分配內存heap。 int arr1[4]=new int[];
在堆上分配14個字節。
int數組的正確聲明是像以下:
int[] arr = new int[] {1,2,3}; // legal, array of size 3
int[] a = new int[100]; // Declare and allocate, array of size 100
否,'INT ARR1 [4] =新int [];'不會編譯,所以它不會在堆上分配任何字節;} – aioobe 2010-10-17 07:22:16
@aioobe:同意。但問題是:*新操作員做什麼* – 2010-10-17 07:26:22
上述程序聲明anArray使用以下行的代碼:
int[] anArray;
//聲明整數數組
贊聲明其他類型的變量時,數組聲明包含兩個組件:數組的類型和數組的名稱。 數組的類型被寫爲[]類型,其中type是所包含元素的數據類型;方括號是特殊符號,表示該變量包含數組。數組的大小不是其類型的一部分(這就是括號爲空的原因)。與其他類型的變量一樣,該聲明實際上並不創建數組 - 它只是告訴編譯器該變量將包含指定類型的數組。
int[] a=new int[5];
a
在陣列名稱例如聲明一個變量「a」 ------> INT一個; 數組一樣INT [] a其中[]是指示聲明數組唯一差異是[]現在來到新
新的運營商,這是什麼操作的功能?
這個新的運算符會去堆內存並分配一個數組(因爲int [])並在數組類型int(由於int [5])中分配5個值來調用引用變量。 。
任何陣列中堆中創建給出引用變量
memory diagram
---------------------
| in heap memory |
| |
||------------------ |
|| | | | | | |
|------------------- |
/ ---------------------
/
/
a/
5個位置作爲int[5]
在上面的例子和參考變量指向陣列存儲器位置
我不會在'int'和'[]'之間放置空格。 – starblue 2010-10-17 07:31:24