天天看點

c/c++/java差別

Java中對記憶體的配置設定是動态的:面向對象的機制,采用運算符new為每個對象配置設定記憶體空間,而且,實際記憶體還會随程式運作情況而改變.程式運作中,每個, Java系統自動對記憶體進行掃描,對長期不用的空間作為”垃圾”進行收集,使得系統資源得到更充分地利用.按照這種機制,程式員不必關注記憶體管理問題,這使Java程式的編寫變得簡單明了,并且避免了了由于記憶體管理方面的差錯而導緻系統出問題.而C語言通過malloc()和free()這兩個庫函數來分别實作配置設定内在和釋放記憶體空間的,C++語言中則通過運算符new和delete來配置設定和釋放記憶體.在C和C++這仲機制中,程式員必須非常仔細地處理記憶體的使用問題.一方面,如果對己釋放的記憶體再作釋放或者對未曾配置設定的記憶體作釋放,都會造成當機;而另一方面,如果對長期不用的或不再使用的記憶體不釋放,則會浪費系統資源,甚至是以造成資源枯竭.

Java不在所有類之外定義全局變量,而是在某個類中定義一種公用靜态的變量來完成全局變量的功能.

Java不用goto語句,而是用try-catch-finally異常處理語句來代替goto語句處理出錯的功能.

Java不支援頭檔案,面C和C++語言中都用頭檔案來定義類的原型,全局變量,庫函數等,這種采用頭檔案的結構使得系統的運作維護相當繁雜.

Java不支援宏定義,而是使用關鍵字final來定義常量,在C++中則采用宏定義來實作常量定義,這不得于程式的可讀性.

Java對每種資料類型都配置設定固定長度.比如,在Java中,int類型總是32位的,而在C和C++中,對于不同的平台,同一個資料類型配置設定不同的位元組數,同樣是int類型,在PC機中為二位元組即16位,而在VAX-11中,則為32位.這使得C語言造成不可移植性,而Java則具有跨平台性(平台無關性).

類型轉換不同.在C和C++中,可通過指針進行任意的類型轉換,常常帶來不安全性,而在Java中,運作時系統對對象的處理要進行類型相容性檢查,以防止不安全的轉換.

結構和聯合的處理.在C和C++中,結構和聯合的所有成員均為公有,這就帶來了安全性問題,而在Java中根本就不包含結構和聯合,所有的内容都封裝在類裡面

Java不再使用指針.指針是C和C++中最靈活,也最容易産生錯誤的資料類型.由指針所進行的記憶體位址操作常會造成不可預知的錯誤,同時通過指針對某個記憶體位址進行顯式類型轉換後,可以通路一個C++中的私有成員,進而破壞安全性.而Java對指針進行完全地控制,程式員不能直接進行任何指針操作.