更新時間:2017年12月29日16時23分 來源:傳智播客 瀏覽次數(shù):
引用:
java和c++都有引用的概念,但兩者是完全不同的東西,c++的引用是變量的一個別名,引用一旦綁定就不能重新引用其他變量,c++引用也不能為null。java引用更像c++的指針,對引用賦值是重新綁定引用的對象(在c++里面是改變對象的值),引用可以為null(導(dǎo)致了煩人的NPE問題,萬惡之源)
類型系統(tǒng):
java區(qū)分值類型與引用類型,用戶自定義類型都是引用類型,值類型和引用類型在很多地方不能混用(如泛型參數(shù)),c++沒有值類型和引用類型的概念,類似的概念是普通類和它的指針類型。
java有根基類Object,c++沒有根基類。
訪問控制:
都有public,protected,private三級訪問控制
此外,java還有包訪問控制,c++有友元
繼承:
c++分public繼承,protected繼承(意義不明)和private繼承(基本和組合沒啥區(qū)別),java只有public繼承。
c++只能覆蓋基類中顯式定義的虛函數(shù),java中方法默認(rèn)是虛的,除非顯式標(biāo)明final
c++支持多重繼承,java只支持單繼承,但支持實現(xiàn)多個接口(c++沒有語法層面上的接口)
構(gòu)造與析構(gòu):
對象構(gòu)造大致相同,但是c++在構(gòu)造函數(shù)中調(diào)用虛函數(shù)無法多態(tài)(因為對象的子類部分還沒構(gòu)造)
c++可以定義析構(gòu)函數(shù),java沒有析構(gòu)函數(shù)(java提供一個終結(jié)方法,但它和析構(gòu)函數(shù)不是等價的)
對象生命周期控制:
c++主要靠手動申請,釋放內(nèi)存或者借助析構(gòu)函數(shù)(RAII技術(shù)),java依靠gc
異常處理:
c++沒有也不需要finally塊,釋放資源依靠析構(gòu)函數(shù)就行了。
泛型:
c++模板采用代碼生成技術(shù),運(yùn)行時能夠保留類型信息,java采用類型擦除,類型信息在運(yùn)行時就沒了(所以其實只是進(jìn)行安全的自動類型轉(zhuǎn)換而已……)。c++模板參數(shù)可以是基本類型,用戶自定義類型和整型常量,java只能是引用類型。c++還可以對模板進(jìn)行特化,java沒有這個功能。
其他:
c++有運(yùn)算符重載,java沒有(除了String類重載了+)