Java與C#個人之比較
網上這方面的比較文章已經有不少了,不過大都是要麼從很高的角度說的,要麼就是從底層說的,本人就以自己這幾年的程式設計經歷中的感受,來談談自己的體會。
相似性:
Java和C#都是一門面向物件的語言,Java更多地借鑑了C++的優點,而摒棄了它的一些不太容易被人掌握的知識點(有些不能說是缺點),並且增加了一些自己的特點,而C#則是更多地借鑑了Java的優點,而增加了一些自己的特點。
個人猜測,在Java語言出現之前,C++被廣泛使用,而且被認為容易使用,Java如此類似於C++,致使人們更容易接受;而現在Java是最廣泛使用的,C#如此接近Java,則更容易吸引Java開發人員(僅僅是猜測)。也就是說
<?xml:namespace prefix = o />
跨平臺特性
跨平臺特性的最大優點就是隻要有相應的執行環境,同一個編譯好的程式就能在上面執行,而不需要重新編譯程式,它的缺點就是不能針對特定平臺,所以不能充分利用平臺特性,因而在效能上會有所降低,幸運的是現在的硬體比以前大大提高,這部分的降低在絕大部分情況下可以不用考慮。而且Java和C#都有自動垃圾回收機制,執行時環境可以自動清理不再使用的記憶體,減少了手動釋放記憶體的風險。
Java的跨平臺特性建立在可以跨越多個不同種類的作業系統平臺,比如Windows、Linux
C#的跨平臺則是建立跨Windows平臺的基礎上的(有一個針對非Windows的.net執行環境,不過好像還不是太好),不像以前Windows95下的程式到WindowsXP下就不能執行,或者WindowsXP下的程式到Windows95下也不能執行(這種情況居多),現在呢,只要安裝一個
這一個回合Java勝出。
語法特性
Java拋棄了指標,使用了包(package)的概念,匯入包使用import語句,在Java中有幾種非面向物件的資料型別,那就是byte、char、short、int、long、float、double這幾種資料型別,在方法中傳遞時僅僅是傳遞它們的值,為了方便一些集合類的操作(它們儲存的是物件型別),又增加了它們的包裝類Byte、Char、Short、Integer、Long、Float、Double。
在Java中存在屬性的概念,這些都是通過setXXX()、getXXX()來設定。
C#沒有完全拋棄指標(在unsafe狀態下還可以操作指標),對於類的管理採用了名稱空間(namespace)的概念,並且還使用了out、ref等關鍵字,便於從一個方法返回多個結果,在C#中不僅存在屬性,還有索引器等比較方便的特性。
生成文件doc文件
在利用程式中的特殊註釋生成api文件方面,兩種語言都有不錯的表現,不過C#更勝一籌,它能利用註釋在輸入類成員時提示,便於程式設計師不用去看程式原始碼而知道程式的大概用途,而Java這方面沒有。
IDE(整合開發環境)方面
Java的IDE是非常多,從龐大的Jbuilder到小巧的Jcreator,還有可以擴充的Eclipse,可以說Java的IDE的數量是非常多的。
C#的IDE不多,除了微軟自己的VS.NET之外,好像還有Borland的C#Builder,除此之外,廣為認知好像不多。
效能方面
Java採用了位元組碼(bytecode),而C#則採用了MSIL,它們的效能都是介於解釋型語言和生成本地機器程式碼之間的,在本人的測試中,C#的效能略高於Java,可能Java的位元組碼要適用多個系統多個平臺的緣故吧。
企業開發方面
由於Java出現的時間長的緣故,並且還能跨平臺,採用EJB等解決方案,所以目前絕大部分網站都是基於J2EE開發的(大部分都是J2EE+MySQL+Apache+Linux,都是免費的)。
C#做的大型網站,它也有針對EJB的Net Remoting技術,由於它限制了必須(IIS+Windows),所以大型的網站不是太多,不過隨著時間的推移,可能會有更多的網站採用asp.net技術。畢竟微軟的東西一向傻瓜化,門檻低,能夠吸引一些初級程式設計人員到這個行列中來。而且微軟的asp.net採用了程式碼和頁面分離技術,的確能方便程式設計人員。
總結:
記得有一句話,大意是這樣的,Linux就像專業相機,拍攝出來的照片取決於你的攝影技術;而Windows就像傻瓜相機,只要會按快門就能拍照。我覺得Java就像Linux,新增一個按鈕,一個標籤都需要你指定樣式,放置到哪裡也需要你指定;而C#則繼續秉承了Windows的特點,傻瓜化,便於操作,便於上手。
補充一點:好像搞Java的同等情況下比C#的高,可能是物以稀為貴吧:)。