1. 程式人生 > >c中和java中陣列的區別

c中和java中陣列的區別

  對於原語型別的陣列,如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裡陣列的記憶體分配是在堆裡面的

,必須用new   來分配,而C裡面是在棧裡面分配的,定義的時候會自動分配。   
  在《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};