Java和C是兩種最常見(jiàn)的編程語(yǔ)言,也具有很大的共同之處。但是,它們?cè)谡Z(yǔ)法上有一些重要的區(qū)別。
Java和C都是面向?qū)ο蟮木幊陶Z(yǔ)言,但是Java它是完全的面向?qū)ο缶幊獭_@意味著,所有的代碼都必須在對(duì)象中定義。而在C中,可以使用結(jié)構(gòu)體來(lái)存儲(chǔ)數(shù)據(jù),但是函數(shù)和數(shù)據(jù)是分開(kāi)定義的。
//Java public class MyClass { private int data; public void setData(int d) { data = d; } public int getData() { return data; } } //C struct myStruct { int data; }; void setData(struct myStruct *s, int d) { s->data = d; } int getData(struct myStruct s) { return s.data; }
Java還擁有自動(dòng)垃圾回收機(jī)制,這意味著當(dāng)對(duì)象沒(méi)有任何引用時(shí),它們就會(huì)被垃圾回收器自動(dòng)清除。而在C中,則需要手動(dòng)分配和釋放內(nèi)存。
//Java MyClass obj = new MyClass(); obj.setData(5); obj = null; //垃圾回收器將會(huì)清除obj所指向的對(duì)象 //C struct myStruct *s = (struct myStruct*)malloc(sizeof(struct myStruct)); setData(s, 5); free(s); //必須手動(dòng)釋放內(nèi)存
最后一個(gè)區(qū)別是Java中,所有的代碼必須寫(xiě)在類中,而在C中則可以在函數(shù)之外編寫(xiě)代碼。
//Java public class MyClass { private int data; public void setData(int d) { data = d; System.out.println("Data set to " + data); } } //C #includestruct myStruct { int data; }; void setData(struct myStruct *s, int d); int main() { struct myStruct s; setData(&s, 5); printf("Data set to %d", s.data); return 0; } void setData(struct myStruct *s, int d) { s->data = d; }
這些區(qū)別使得Java和C在使用時(shí)具有不同的風(fēng)格和技能要求。然而,如果您熟悉其中一種語(yǔ)言的語(yǔ)法,學(xué)習(xí)另一種語(yǔ)言的語(yǔ)法就不會(huì)太困難。