樓主:好象聽(tīng)說(shuō)是有些不一樣,請(qǐng)高手指教。
2 樓:有一些不一樣。
對(duì)于原語(yǔ)類(lèi)型的數(shù)組,如int[] a,在C里面只要這樣定義之后就可以用a[i]使用了,但是在JAVA里面是不行的,必須用int[] a = new int[LENGTH];來(lái)為數(shù)組分配空間。這里的a更應(yīng)該看成C里面的指針,它和C里面的int* a是一樣的,因?yàn)檫@個(gè)a(C里面的)也要先malloc一個(gè)空間之后才可以用。 對(duì)于對(duì)象數(shù)組,則要“兩次分配”,如: Object[] obj = new Object[2]; obj[0] = new Object(); obj[1] = new Object(); 因?yàn)閿?shù)組首先是一個(gè)句柄,而這個(gè)句柄指向的2個(gè)空間里面又是存儲(chǔ)著兩個(gè)指向Object類(lèi)型的句柄。 而C里面不完全相同: struct Object{}; struct Object* obj = (struct Object *)malloc(2 * sizeof(struct Object)); 其實(shí)他們的原理大至是相同的。只不過(guò)JAVA里數(shù)組的內(nèi)存分配是在堆里面的,必須用new 來(lái)分配,而C里面是在棧里面分配的,定義的時(shí)候會(huì)自動(dòng)分配。 在《Thinking in JAVA》中有更詳細(xì)的介紹。 |
|
來(lái)自: 重金屬男孩 > 《我的圖書(shū)館》