Java与C#个人之比较
網(wǎng)上這方面的比較文章已經(jīng)有不少了,不過(guò)大都是要么從很高的角度說(shuō)的,要么就是從底層說(shuō)的,本人就以自己這幾年的編程經(jīng)歷中的感受,來(lái)談?wù)勛约旱捏w會(huì)。
相似性:
Java和C#都是一門面向?qū)ο蟮恼Z(yǔ)言,Java更多地借鑒了C++的優(yōu)點(diǎn),而摒棄了它的一些不太容易被人掌握的知識(shí)點(diǎn)(有些不能說(shuō)是缺點(diǎn)),并且增加了一些自己的特點(diǎn),而C#則是更多地借鑒了Java的優(yōu)點(diǎn),而增加了一些自己的特點(diǎn)。
個(gè)人猜測(cè),在Java語(yǔ)言出現(xiàn)之前,C++被廣泛使用,而且被認(rèn)為容易使用,Java如此類似于C++,致使人們更容易接受;而現(xiàn)在Java是最廣泛使用的,C#如此接近Java,則更容易吸引Java開(kāi)發(fā)人員(僅僅是猜測(cè))。也就是說(shuō)Java站在C++的肩膀上,而C#站在了Java的肩膀上。
?
跨平臺(tái)特性
跨平臺(tái)特性的最大優(yōu)點(diǎn)就是只要有相應(yīng)的運(yùn)行環(huán)境,同一個(gè)編譯好的程序就能在上面運(yùn)行,而不需要重新編譯程序,它的缺點(diǎn)就是不能針對(duì)特定平臺(tái),所以不能充分利用平臺(tái)特性,因而在性能上會(huì)有所降低,幸運(yùn)的是現(xiàn)在的硬件比以前大大提高,這部分的降低在絕大部分情況下可以不用考慮。而且Java和C#都有自動(dòng)垃圾回收機(jī)制,運(yùn)行時(shí)環(huán)境可以自動(dòng)清理不再使用的內(nèi)存,減少了手動(dòng)釋放內(nèi)存的風(fēng)險(xiǎn)。
Java的跨平臺(tái)特性建立在可以跨越多個(gè)不同種類的操作系統(tǒng)平臺(tái),比如Windows、Linux、Unix等,但是需要注意的是不是說(shuō)Java能在所有的系統(tǒng)上都能跨平臺(tái),必須實(shí)現(xiàn)在該操作系統(tǒng)上的Java運(yùn)行時(shí)環(huán)境JRE才行,也就是說(shuō)假如今天有人開(kāi)發(fā)了一個(gè)前所未有的系統(tǒng),這時(shí)候Java程序是不能在上面運(yùn)行的——因?yàn)檫€沒(méi)有針對(duì)這個(gè)操作系統(tǒng)的Java虛擬機(jī)(JVM),好在在當(dāng)今絕大部分操作系統(tǒng)上都有針對(duì)該系統(tǒng)的JVM,所以它能“一次編譯,到處運(yùn)行”。
C#的跨平臺(tái)則是建立跨Windows平臺(tái)的基礎(chǔ)上的(有一個(gè)針對(duì)非Windows的.net運(yùn)行環(huán)境,不過(guò)好像還不是太好),不像以前Windows95下的程序到WindowsXP下就不能運(yùn)行,或者WindowsXP下的程序到Windows95下也不能運(yùn)行(這種情況居多),現(xiàn)在呢,只要安裝一個(gè).net framework(也就是.net程序的運(yùn)行時(shí)環(huán)境),在Windows2003下編寫的.net程序不用重新編譯就能在Windows98下運(yùn)行,只要這臺(tái)安裝Windows98的機(jī)子安裝了.net程序的運(yùn)行時(shí)環(huán)境。
這一個(gè)回合Java勝出。
?
語(yǔ)法特性
Java拋棄了指針,使用了包(package)的概念,導(dǎo)入包使用import語(yǔ)句,在Java中有幾種非面向?qū)ο蟮臄?shù)據(jù)類型,那就是byte、char、short、int、long、float、double這幾種數(shù)據(jù)類型,在方法中傳遞時(shí)僅僅是傳遞它們的值,為了方便一些集合類的操作(它們存儲(chǔ)的是對(duì)象類型),又增加了它們的包裝類Byte、Char、Short、Integer、Long、Float、Double。
在Java中存在屬性的概念,這些都是通過(guò)setXXX()、getXXX()來(lái)設(shè)置。
?
C#沒(méi)有完全拋棄指針(在unsafe狀態(tài)下還可以操作指針),對(duì)于類的管理采用了名稱空間(namespace)的概念,并且還使用了out、ref等關(guān)鍵字,便于從一個(gè)方法返回多個(gè)結(jié)果,在C#中不僅存在屬性,還有索引器等比較方便的特性。
?
生成文檔doc文檔
在利用程序中的特殊注釋生成api文檔方面,兩種語(yǔ)言都有不錯(cuò)的表現(xiàn),不過(guò)C#更勝一籌,它能利用注釋在輸入類成員時(shí)提示,便于程序員不用去看程序源碼而知道程序的大概用途,而Java這方面沒(méi)有。
?
IDE(集成開(kāi)發(fā)環(huán)境)方面
Java的IDE是非常多,從龐大的Jbuilder到小巧的Jcreator,還有可以擴(kuò)充的Eclipse,可以說(shuō)Java的IDE的數(shù)量是非常多的。
?
C#的IDE不多,除了微軟自己的VS.NET之外,好像還有Borland的C#Builder,除此之外,廣為認(rèn)知好像不多。
?
性能方面
Java采用了字節(jié)碼(bytecode),而C#則采用了MSIL,它們的性能都是介于解釋型語(yǔ)言和生成本地機(jī)器代碼之間的,在本人的測(cè)試中,C#的性能略高于Java,可能Java的字節(jié)碼要適用多個(gè)系統(tǒng)多個(gè)平臺(tái)的緣故吧。
?
企業(yè)開(kāi)發(fā)方面
由于Java出現(xiàn)的時(shí)間長(zhǎng)的緣故,并且還能跨平臺(tái),采用EJB等解決方案,所以目前絕大部分網(wǎng)站都是基于J2EE開(kāi)發(fā)的(大部分都是J2EE+MySQL+Apache+Linux,都是免費(fèi)的)。
?
C#做的大型網(wǎng)站,它也有針對(duì)EJB的Net Remoting技術(shù),由于它限制了必須(IIS+Windows),所以大型的網(wǎng)站不是太多,不過(guò)隨著時(shí)間的推移,可能會(huì)有更多的網(wǎng)站采用asp.net技術(shù)。畢竟微軟的東西一向傻瓜化,門檻低,能夠吸引一些初級(jí)編程人員到這個(gè)行列中來(lái)。而且微軟的asp.net采用了代碼和頁(yè)面分離技術(shù),的確能方便編程人員。
?
總結(jié):
記得有一句話,大意是這樣的,Linux就像專業(yè)相機(jī),拍攝出來(lái)的照片取決于你的攝影技術(shù);而Windows就像傻瓜相機(jī),只要會(huì)按快門就能拍照。我覺(jué)得Java就像Linux,添加一個(gè)按鈕,一個(gè)標(biāo)簽都需要你指定樣式,放置到哪里也需要你指定;而C#則繼續(xù)秉承了Windows的特點(diǎn),傻瓜化,便于操作,便于上手。
補(bǔ)充一點(diǎn):好像搞Java的同等情況下比C#的高,可能是物以稀為貴吧:)。?總結(jié)
以上是生活随笔為你收集整理的Java与C#个人之比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 变量名和内存地址及符号表
- 下一篇: C/C++编译和链接过程详解 概述 (重