c中和java中陣列的區別
阿新 • • 發佈:2019-02-11
對於原語型別的陣列,如int[] a,在C裡面只要這樣定義之後就可以用a[i]使用了,但是在JAVA裡面是不行的,必須用int[] a = new int[LENGTH];來為陣列分配空間。這裡的a更應該看成C裡面的指標,它和C裡面的int* a是一樣的,因為這個a(C裡面的)也要先malloc一個空間之後才可以用。
對於物件陣列,則要“兩次分配”,如:
Object[] obj = new Object[2];
obj[0] = new Object();
obj[1] = new Object();
因為陣列首先是一個控制代碼,而這個控制代碼指向的2個空間裡面又是儲存著兩個指向Object型別的控制代碼。
而C裡面不完全相同:
struct Object{};
struct Object* obj = (struct Object *)malloc(2 * sizeof(struct Object));
其實他們的原理大至是相同的。只不過JAVA裡陣列的記憶體分配是在堆裡面的
在《Thinking in JAVA》中有更詳細的介紹。
java在宣告陣列的時候不能加數量的.只能初始化的時候加
int[] a = new int[3]; 或
int a[] = new int[3]; 都行
c語言中,宣告的時候加不加數量都可以
int a[3] = {1,2,3};
int a[] = {1,2,3};