具體的講,C#相比JAVA有哪些先進的地方?

JAVA不包括收費虛擬機


這個必須把@趙劼 的why C# rocks and java sucks拉出來啊,一針見血。新版java語言發布後有所改善,但裡面的很多觀點依然有價值。還有這個比較是針對java語言和c#語言,而不是針對JVM和CLR的,要注意。

傳送門:http://www.slideshare.net/jeffz/why-java-sucks-and-c-rocks-fina@趙劼


語言的特性. 如:

  • Reification 的泛型 (對比 Java 的類型擦除的實現);

  • LINQ;

  • 統一的 IEnumerable& 介面;

  • 基本類型也繼承自 Object;

  • 結構 (傳值的類);

  • 擴展方法;

  • 動態類型綁定;

  • 非同步 async/await;

等等.


async/await比java先進


學過Java的同學再學C#會很輕鬆,毫無疑問,Java與C#有著深刻的影響。Java與C#的語法非常類似。基至Java和.NET基礎類的結構也非誠類似。兩者都依賴於位元組代碼。

C#勝於java的地方:

一、C#的語法要比Java強大。C#支持運算符重載和類型安全的枚舉。

二、C#可以與其他.NET語言編寫的代碼進行無縫交互操作,IT部門不需要標準化C#,就可以在工程中使用它。

三、C#在程序中可選擇嵌入式指針和其他受託管的語法,只要把它們放在非安全的代碼塊中即可。

四、.NET基類為C#提供了一個統一的、標準化的源,以滿足常用功能的需要。

五、功能強大,是Windows平台上的主要編程語言,應用比較廣泛。如:DOS程序、桌面Windows程序、遊戲程序、Web程序、手機應用程序。

不過,Java有一個地方強過C#,就是平台獨立性。因為所有主要計算平台都可以實現Java運行時,所以相同的Java代碼在理論上都可以在這些平台上運行。這一點.NET程序做不到,至少現在做不到。


C#非同步事件委託回調方法多!


其實JAVA的出現是以C++為基礎的,要說更方便的我認為JAVA更方面一些,擴展性更好的應該是C++


首先,Eclipse和VS就是屌絲遇上高富帥,用慣了VS真的不習慣用Eclipse的說,世界上最強大的IDE加成,讓你的手速比你的大腦還要快。

其次,C#是微軟傾注心血的語言,而JAVA沒有一個非常系統的開發團隊,就目前來說,我個人感覺C#的更新也許每年都會有,但是JAVA語言的語法特性也許就止步於這幾年了。(個人理解,請輕拍)。

最後,感覺C#現在的新語法都比較貼合自然語言,編起程來那叫一個順手

給你一種沉醉與代碼世界的感覺,嘻嘻嘻。

圖片網路找的,圖侵刪


比較起Java和C#大相徑庭的那10%,會發現C#五花八門的特性要多很多。比較知名的有:委託,屬性,真正的泛型,索引器,類初始化器,分部類,操作符重載,struct,unsafe代碼,IDisposable等,另外。net framework 3.5還加了一大串純粹由編譯器提供的特性。

  委託,這個可以算是C#之於Java的最大優勢。雖然Java可以依靠介面,匿名內部類這些特性實現委託一樣的功能,但卻要麻煩許多,如果涉及到N個委託實例相加的情況,那麼一個C#裡面簡單的"+"號,在Java里就只能用FilterChain,InterceptorStack這種概念了。

  真正的泛型,這個又是一大C#的優勢,同時偽泛型又是Java的一大敗筆。但是Java年代比較長,為兼容性考慮不得不使用假的泛型實現。如果泛型不是在jdk1.5時推出,而是在jdk1.4,和collection framework一起推出,我認為它也會採用真正的泛型實現。

  索引器,有了這個很多容器類都可以直接用[]取元素,感覺還不錯,比沒有好,編譯器的小把戲。類初始化器,典型的懶漢特性。每次用頂多能省下一兩行代碼,又是編譯器的小把戲。分部類(partial class),純粹為了http://vs.net的那一大堆圖形化設計器老和人的代碼衝突而搞出來得玩意,又是編譯器的小把戲。

  操作符重載,屬於用到得不多,要用時卻顯得特別有用的東西。struct,在堆棧上的東西,釋放內存那是超級的快,只不過需要用到這個的場合,大概都在使用C++編程。unsafe代碼,純粹增加語言複雜性的東西。就好像一個人搬家,看這個不捨得扔,那個也不捨得扔,搞到最後把瓶瓶罐罐都搬走了。IDisposable,實現這個介面,配合using塊,非常的強大,終於可以像C++那樣掌握對象的銷毀了。


並無太大區別

都不能迅速釋放連接和內存空間

微軟自己一直在做生態圈,只是別的系統一發展起來就兼容開發,所以我個人並不喜歡不能跨平台的語言


推薦閱讀:

計算機專業不學c語言是怎樣的存在?
程序員怎麼學習英語?
編程是靠記憶嗎?
0基礎學編程應該學哪種語言更迅速,看哪些書?
C語言會被解釋成彙編語言,為什麼C會比彙編慢呢?

TAG:編程語言 | 編程 | Java | C# |