Java與C++的優(yōu)劣:誰更勝一籌?
譯文
【51CTO.com快譯】上圖僅供娛樂,不過今天我們主要探討Java與C++間的優(yōu)劣。
1.基礎(chǔ)介紹
Java與C++都擁有相當(dāng)長的歷史,且語法相當(dāng)類似,并被眾多業(yè)界巨頭所采用。事實(shí)上,Java本來就是從C++衍生出來的。
不過盡管相似,二者之間仍然存在顯著區(qū)別。很多人都說會(huì)C++就能會(huì)快掌握J(rèn)ave。C++是不好學(xué),但是我告訴你java也不好學(xué)。C++難是難在語言本身,java難是難在各種框架和庫。你單純學(xué)個(gè)java語法,你什么玩意也做不了,java的東西都在java之外。
2.C++對Java:從就業(yè)的角度
上面這兩個(gè)圖片,已經(jīng)明確的表達(dá)出c++的就業(yè)機(jī)會(huì)比java少。java側(cè)重于大型企業(yè)級應(yīng)用開發(fā),C++側(cè)重于底層應(yīng)用開發(fā)。至于薪資方面呢,不管是C++還是java,有了多年項(xiàng)目經(jīng)驗(yàn)后,工資都會(huì)比較高?,F(xiàn)在網(wǎng)頁,移動(dòng)APP,都是通過http與服務(wù)器通訊,在http請求上面,JAVA處理較好,C++沒有處理優(yōu)勢。所以,后臺(tái)服務(wù)器都會(huì)用到JAVA,而不一定用到C++(大型的項(xiàng)目才會(huì)用到)。因此,為了找工作:選Java。為挑戰(zhàn)自我:選C++。
3.C++對Java:相似之處
很多人都愛拿C++對Java作對比的原因也是C++與Java擁有諸多相似之處。因此在為項(xiàng)目選擇語言時(shí),大家應(yīng)主要考慮到當(dāng)前團(tuán)隊(duì)成員更熟悉哪款語言。
-
語法:兩種語言中的循環(huán)結(jié)構(gòu)、類、變量定義以及條件運(yùn)算符非常相近,意味著開發(fā)者能夠輕松在不同項(xiàng)目中分別使用這兩種語言,而不會(huì)遇到太多障礙。
-
入口點(diǎn):在程序啟動(dòng)時(shí),編譯器或者解釋器會(huì)查找開始執(zhí)行的對應(yīng)位置。Java與C++都以“main”作為入口點(diǎn)。
-
面向?qū)ο?面向?qū)ο蟾拍畲碇Z言利用類來表示程序中的組件。每個(gè)類包含有其定義的方法與屬性。C++與Java都屬于面向?qū)ο笳Z言,這意味著程序?qū)⒏吣K化特性,允許大家將代碼復(fù)用至其它程序當(dāng)中。
4.C++與Java的區(qū)別
人們往往誤以為兩種語言相似意味著其在功能上也彼此接近。然而,盡管Java與C++擁有類似的語法,但其執(zhí)行與處理機(jī)制則完全不同。
(1)解釋對編譯:Java是一種解釋性語言,意味著其在執(zhí)行時(shí)會(huì)被“翻譯”為二進(jìn)制形式,也就是java跑得時(shí)候必須有人(jvm)去解釋它。而C++則是編譯語言,意味著程序只能在特定操作系統(tǒng)上編譯并在特定系統(tǒng)上運(yùn)行,也就是說C++一步到位成機(jī)器語言的。
(2)內(nèi)存安全:Java是一種內(nèi)存安全型語言,意味著大家可以為給定數(shù)組分配任意參數(shù),即使超出范圍也只會(huì)返回錯(cuò)誤提示。C++更為靈活,但代價(jià)是一旦分配的參數(shù)超出資源范圍,則會(huì)引起錯(cuò)誤甚至嚴(yán)重崩潰。
(3)性能:Java人氣極高,但其代碼由于需要在運(yùn)行前進(jìn)行解釋因此性能表現(xiàn)更差。C++會(huì)被編譯為二進(jìn)制形式,因此其能夠立即運(yùn)行且速度更快。如果你寫一個(gè)c++的程序和做同樣事情的java程序,可能你感覺兩者速度差不多。但如果這兩個(gè)程序都足夠大、而且c++的代碼經(jīng)過過優(yōu)化,兩者的速度差就會(huì)變得很顯著甚至很驚人,C++會(huì)比java快很多。
(4)指針:指針是一種C++結(jié)構(gòu),允許您直接在內(nèi)存空間中進(jìn)行值管理。Java不支持指針,因此您可能使用值引用的方式進(jìn)行值傳遞。
(5)重載:重載是指對某種方法或者運(yùn)算符的功能進(jìn)行“重新定義”。Java允許方法重載,而C++則允許進(jìn)行運(yùn)算符重載。
4.誰更適合您的項(xiàng)目?
Java與C++沒有哪個(gè)更好,只有哪個(gè)更合適。他們都可用于創(chuàng)建各類程序,但具體選擇取決于您希望開發(fā)的實(shí)際內(nèi)容。
C++通常適合那些需要“硬件級”操作的軟件。二者之間的***區(qū)別在于,C++更接近機(jī)器語言,因此其軟件運(yùn)行速度更快且能夠直接與計(jì)算機(jī)內(nèi)存、磁盤、CPU或者其它設(shè)備進(jìn)行協(xié)作。另外,C++也能為游戲提供良好的運(yùn)行性能。
大家也可以利用Java操作硬件,但它不屬于低級通用編程語言,因?yàn)槠涓?ldquo;安全”。因?yàn)镴ava不允許利用某些功能進(jìn)行PC保護(hù),因此它更適合較高級別的應(yīng)用。Java是Android開發(fā)領(lǐng)域的王者,因此移動(dòng)開發(fā)者無疑應(yīng)該選擇它作為項(xiàng)目基礎(chǔ)。另外,Java也常見于Web及桌面應(yīng)用乃至服務(wù)器端應(yīng)用。再有,Java的接納程度更高,意味著我們更容易找到水平不錯(cuò)的Java開發(fā)者——而C++人才則相對稀缺。
總體來講,C++幾乎可以實(shí)現(xiàn)任何功能,但除非擁有明顯理由,否則我們不會(huì)將其作為***。Java則是一切都足夠——雖然并非***,但完全足夠。而更重要的是,Java開發(fā)者群體更為龐大。
原文標(biāo)題:Java vs C++: Which Language is Right for Your Software Project?
原文作者:Jennifer Marsh
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】