閑話少敘,咱直接進(jìn)入正題。最近和兩位Java大牛喝了牛肉湯后,驚奇發(fā)現(xiàn),他們都提及到了一個(gè)很有意思的話題:Java的開(kāi)發(fā)效率比C++要高!java培訓(xùn)班小編的常識(shí)認(rèn)為,C++的運(yùn)行效率高,Java的開(kāi)發(fā)效率高,但究竟是為什么,我覺(jué)得有必要弄個(gè)明白,我請(qǐng)教了幾位大牛,他們這樣說(shuō):
A Ja man 說(shuō)
C++是面向內(nèi)存編程,Java則是面向數(shù)據(jù)結(jié)構(gòu)編程。
C++里,內(nèi)存是裸露的,可以拿到地址,隨意徜徉,增了刪了,沒(méi)人攔你,等到跑的時(shí)候崩給你看。
然而Java里,能操作的都是設(shè)計(jì)好的數(shù)據(jù)結(jié)構(gòu),array有長(zhǎng)度,String不可變,每一個(gè)都是安全的,在內(nèi)存和程序員之間,隔著JVM,像是包住了邊邊角角的房間,隨便小孩折騰,不會(huì)受傷。
Java程序員是孩子,嚷嚷要這個(gè)那個(gè),玩完了就丟,JVM是家長(zhǎng),買買買,還要負(fù)責(zé)收拾。有的孩子熊點(diǎn),屋子很亂,收拾起來(lái)費(fèi)勁,但房子還在。
C++程序員是神,操縱著江河湖海,日月星辰,但能力越大,責(zé)任越大,萬(wàn)一新來(lái)的神比較愣,手一滑,宇宙就退出了。
新手寫(xiě)C++,像是抱著一捆指針,在浩瀚的內(nèi)存中裸奔。跑著跑著,有的針掉了,不知蹤影,內(nèi)存就泄露了;跑著跑著,突然被人逮住,按在地上打的error紛飛,內(nèi)存就越界了;終于到了,舒了口氣,把針插在腳下,念出咒語(yǔ),“delete”,系統(tǒng)就崩潰啦!
B Ja man 覺(jué)得吧
我剛做程序員的時(shí)候發(fā)現(xiàn)自己寫(xiě)的代碼速度非常慢,當(dāng)時(shí)對(duì)STL遠(yuǎn)比周圍人熟悉,按這樣想,應(yīng)該效率高才對(duì)啊。結(jié)果發(fā)現(xiàn)并不是,寫(xiě)代碼的時(shí)候總想:“這樣必然可以work了,但一定有更好的方法,會(huì)是啥呢?抽象出一個(gè)基類?做個(gè)bridge模式?那Ownership的問(wèn)題怎么解決?誰(shuí)負(fù)責(zé)回收內(nèi)存呢?太復(fù)雜,別人也理解不了。就先這樣吧,能work就好?!?
就這樣,兜了一個(gè)圈子回來(lái)。有的時(shí)候,這個(gè)圈子不是純柏拉圖式的,我會(huì)真的實(shí)現(xiàn)不少 “優(yōu)化”
設(shè)計(jì)來(lái)比對(duì),那個(gè)時(shí)間啊,花花的就耗在里面啦。有的時(shí)候確實(shí)會(huì)獲得一些改進(jìn),但是多數(shù)時(shí)候是得不償失,旁邊那些在我看來(lái)連C都只是一知半解的家伙采用
“CtrlC-CtrlV-Modify-Debug” 大法,早就沖到我前頭去了。這就是“心智包袱”的威力。
C Ja man said
Java是一門你不需要講究,也沒(méi)法講究的語(yǔ)言。很多c++資深人士寫(xiě)不好java 或者寫(xiě)的很難受,就是因?yàn)樗麄兿牒芏嗟怯譀](méi)法實(shí)現(xiàn)哇。
D Ja man 認(rèn)為
獨(dú)孤九劍,摘葉飛花皆可傷人。手中無(wú)劍,心中有劍,用龍泉還是莫邪有什么區(qū)別?用神兵還是樹(shù)枝有什么區(qū)別?
不過(guò)大宋步兵還是不能用樹(shù)枝。
對(duì)于優(yōu)秀的程序員來(lái)說(shuō),語(yǔ)法,語(yǔ)言特性,編譯器,運(yùn)行時(shí)環(huán)境都不是問(wèn)題。不過(guò)于此相反的是,對(duì)于不優(yōu)秀的程序員,這些通通都是問(wèn)題。
最簡(jiǎn)單的,去掉“指針”,對(duì)于獨(dú)孤九劍式的程序員,并沒(méi)有什么開(kāi)發(fā)效率的提升,但是對(duì)于大宋步兵式的程序員,就少了很多坑,這就帶來(lái)了開(kāi)發(fā)效率的提升。我們當(dāng)然要追求當(dāng)獨(dú)孤九劍,不過(guò),當(dāng)你做大宋將軍時(shí),最好別把你的士兵都當(dāng)獨(dú)孤九劍那么用,鐵定死的很慘。
不知上面幾位大哥的見(jiàn)解能否給你一些指引或是腦洞呢,程序娃的常規(guī)認(rèn)識(shí)是C++的運(yùn)行效率高而Java的開(kāi)發(fā)效率高(相對(duì)而言)。但在某些場(chǎng)景下Java的性能已經(jīng)不輸C++啦,有的即使落后,但感知差距也并不大。而現(xiàn)代C++有了更多方便的語(yǔ)法和工具,開(kāi)發(fā)效率也是有了很大的提高,所以了解語(yǔ)言之間的差異更多的還是讓我們對(duì)技術(shù)實(shí)現(xiàn)的原理和深度有了更高層面的認(rèn)識(shí),有了更好的視野而已。
以上,部分觀點(diǎn)參考知乎! 更多精彩內(nèi)容請(qǐng)關(guān)注java培訓(xùn)機(jī)構(gòu)的官網(wǎng)