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