1. 程式人生 > >Java與C#個人之比較

Java與C#個人之比較

網上這方面的比較文章已經有不少了,不過大都是要麼從很高的角度說的,要麼就是從底層說的,本人就以自己這幾年的程式設計經歷中的感受,來談談自己的體會。

相似性:

JavaC#都是一門面向物件的語言,Java更多地借鑑了C++的優點,而摒棄了它的一些不太容易被人掌握的知識點(有些不能說是缺點),並且增加了一些自己的特點,而C#則是更多地借鑑了Java的優點,而增加了一些自己的特點。

個人猜測,在Java語言出現之前,C++被廣泛使用,而且被認為容易使用,Java如此類似於C++,致使人們更容易接受;而現在Java是最廣泛使用的,C#如此接近Java,則更容易吸引Java開發人員(僅僅是猜測)。也就是說

Java站在C++的肩膀上,而C#站在了Java的肩膀上。

 <?xml:namespace prefix = o />

跨平臺特性

跨平臺特性的最大優點就是隻要有相應的執行環境,同一個編譯好的程式就能在上面執行,而不需要重新編譯程式,它的缺點就是不能針對特定平臺,所以不能充分利用平臺特性,因而在效能上會有所降低,幸運的是現在的硬體比以前大大提高,這部分的降低在絕大部分情況下可以不用考慮。而且JavaC#都有自動垃圾回收機制,執行時環境可以自動清理不再使用的記憶體,減少了手動釋放記憶體的風險。

Java的跨平臺特性建立在可以跨越多個不同種類的作業系統平臺,比如WindowsLinux

Unix等,但是需要注意的是不是說Java能在所有的系統上都能跨平臺,必須實現在該作業系統上的Java執行時環境JRE才行,也就是說假如今天有人開發了一個前所未有的系統,這時候Java程式是不能在上面執行的——因為還沒有針對這個作業系統的Java虛擬機器(JVM),好在在當今絕大部分作業系統上都有針對該系統的JVM,所以它能“一次編譯,到處執行”。

C#的跨平臺則是建立跨Windows平臺的基礎上的(有一個針對非Windows.net執行環境,不過好像還不是太好),不像以前Windows95下的程式到WindowsXP下就不能執行,或者WindowsXP下的程式到Windows95下也不能執行(這種情況居多),現在呢,只要安裝一個

.net framework(也就是.net程式的執行時環境),在Windows2003下編寫的.net程式不用重新編譯就能在Windows98下執行,只要這檯安裝Windows98的機子安裝了.net程式的執行時環境。

這一個回合Java勝出。

語法特性

Java拋棄了指標,使用了包(package)的概念,匯入包使用import語句,在Java中有幾種非面向物件的資料型別,那就是bytecharshortintlongfloatdouble這幾種資料型別,在方法中傳遞時僅僅是傳遞它們的值,為了方便一些集合類的操作(它們儲存的是物件型別),又增加了它們的包裝類ByteCharShortIntegerLongFloatDouble

Java中存在屬性的概念,這些都是通過setXXX()getXXX()來設定。

C#沒有完全拋棄指標(在unsafe狀態下還可以操作指標),對於類的管理採用了名稱空間(namespace)的概念,並且還使用了outref等關鍵字,便於從一個方法返回多個結果,在C#中不僅存在屬性,還有索引器等比較方便的特性。

生成文件doc文件

在利用程式中的特殊註釋生成api文件方面,兩種語言都有不錯的表現,不過C#更勝一籌,它能利用註釋在輸入類成員時提示,便於程式設計師不用去看程式原始碼而知道程式的大概用途,而Java這方面沒有。

IDE(整合開發環境)方面

JavaIDE是非常多,從龐大的Jbuilder到小巧的Jcreator,還有可以擴充的Eclipse,可以說JavaIDE的數量是非常多的。

C#IDE不多,除了微軟自己的VS.NET之外,好像還有BorlandC#Builder,除此之外,廣為認知好像不多。

效能方面

Java採用了位元組碼(bytecode),而C#則採用了MSIL,它們的效能都是介於解釋型語言和生成本地機器程式碼之間的,在本人的測試中,C#的效能略高於Java,可能Java的位元組碼要適用多個系統多個平臺的緣故吧。

企業開發方面

由於Java出現的時間長的緣故,並且還能跨平臺,採用EJB等解決方案,所以目前絕大部分網站都是基於J2EE開發的(大部分都是J2EE+MySQL+Apache+Linux,都是免費的)。

C#做的大型網站,它也有針對EJBNet Remoting技術,由於它限制了必須(IIS+Windows),所以大型的網站不是太多,不過隨著時間的推移,可能會有更多的網站採用asp.net技術。畢竟微軟的東西一向傻瓜化,門檻低,能夠吸引一些初級程式設計人員到這個行列中來。而且微軟的asp.net採用了程式碼和頁面分離技術,的確能方便程式設計人員。

總結:

記得有一句話,大意是這樣的,Linux就像專業相機,拍攝出來的照片取決於你的攝影技術;而Windows就像傻瓜相機,只要會按快門就能拍照。我覺得Java就像Linux,新增一個按鈕,一個標籤都需要你指定樣式,放置到哪裡也需要你指定;而C#則繼續秉承了Windows的特點,傻瓜化,便於操作,便於上手。

補充一點:好像搞Java的同等情況下比C#的高,可能是物以稀為貴吧:)。