[英]What does the new operator do when creating an array in java?
當我們創建一個classtype對象時,new運算符會在運行時分配內存。
說
myclass obj1 = new myclass();
這里myclass()
定義了myclass
的構造函數
但
int arr1[4] = new int[];
new分配內存,但int[]
在這里做什么?
新的分配內存,但int []在這里做什么?
int[]
部分簡單地指定新分配的內存應該具有的類型。
但是,由於數組不能動態增長,所以編寫new int[]
是沒有意義的(即使你在聲明中指定了int[4]
),你必須像這樣編寫它
int arr1[] = new int[4];
或者像這樣
int arr1[] = {1, 2, 3, 4};
JLS中的相關部分:
你的代碼:
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
。
上面的程序使用以下代碼行聲明anArray:
int[] anArray;
//聲明一個整數數組
與其他類型的變量的聲明一樣,數組聲明有兩個組件:數組的類型和數組的名稱。 數組的類型寫為type [],其中type是包含元素的數據類型; 方括號是特殊符號,表示此變量包含數組。 數組的大小不是其類型的一部分(這就是括號為空的原因)。 與其他類型的變量一樣,聲明實際上並不創建數組 - 它只是告訴編譯器該變量將包含指定類型的數組。
int[] a=new int[5];
a
是數組名稱,例如聲明變量'a'------> int a; 對於數組int [] a的相同方式,其中[]表示聲明數組只有diff是[] 現在來到新的
new是一個運算符這個運算符的功能是什么?
這個新運算符轉到堆內存並分配一個數組(由於int [])並在數組類型int中分配5個值(由於int [5])調用引用變量。其中引用變量是arrayname即a。
在堆中創建的任何數組都被賦予引用變量a
memory diagram
---------------------
| in heap memory |
| |
||------------------ |
|| | | | | | |
|------------------- |
/ ---------------------
/
/
a/
在上面的示例中,5個位置為int[5]
,引用變量指向數組內存位置
創建對象的實例。 new
在堆上分配內存。 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.