回覆列表
-
1 # 一枚大腦
-
2 # 18x2
就語法方面,c#很喜歡搞一些語法糖加快開發速度,另外也會看上去很優雅,但是經常把語言和類庫框架甚至平臺和ide給偶和了,用幾天全用,只用一部分就特別彆扭。java則把重心放在了工程化方面,工具鏈的建設,生態圈的培養,提倡百花齊放而不像c#只是微軟一家支援。而且目前來說c#只能跑在.net框架上,之前只能在win上執行,mono看上去沒人敢用在大規模的生產環境,加上windows天然對web不友好,可運維能力不如linux,單純的伺服器應用耗費系統資源大等等問題。但是java比c#更容易遇到過度設計的問題,java的思想太喜歡抽象了,太喜歡模式了。要把oo用到極致。對小規模的專案反而是負擔。
-
3 # 弱水三千84562709
個人感覺java和c#主要是資料、開發程式的時間和跨平臺型上差距大一點。語法什麼的基本上差別不大,c#往java轉型也很快,c#開發做了幾年,也曾學過一段時間java,表示c#的IDE比java的要好用好多,這可能在開發時間上佔有一定的優勢。如果資料量特別大,個人感覺java的效率要比c#的高很多,所以很多大型專案或者大資料處理都是用的java語言來開發的。java支援安卓和pc端的軟體開發,並且不侷限於作業系統,直至vs2013c#才慢慢的往移動端開發發展,所以移動端開發也並不是很成熟。跨平臺性優越和大資料比c#優越這可能是很多公司選擇java的重點之一
從歷史上看,JAVA先出。C#彌補了JAVA在作為程式語言上的一些不足,例如委託,屬性,真正的泛型,索引器,類初始化器,分部類,運算子過載,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),純粹為了vs.net的那一大堆圖形化設計器老和人的程式碼衝突而搞出來得玩意,又是編譯器的小把戲。
運算子過載,屬於用到得不多,要用時卻顯得特別有用的東西。struct,在堆疊上的東西,釋放記憶體那是超級的快,只不過需要用到這個的場合,大概都在使用C++程式設計。unsafe程式碼,純粹增加語言複雜性的東西。就好像一個人搬家,看這個不捨得扔,那個也不捨得扔,搞到最後把瓶瓶罐罐都搬走了。IDisposable,實現這個介面,配合using塊,非常的強大,終於可以像C++那樣掌握物件的銷燬了。。
動態代理: Java裡面要實現AOP,易如反掌;C#要實現AOP,相對較難,不得不借助Assamble名稱空間下的那些動態IL生成工具或者使用攔截器。這就是動態代理的作用。
IDE方面,C#之於Windows平臺下的.net Framework,有著公認最強大的整合開發環境--Visual Studio;JAVA則比較自由,著名的eclipse,netbeans等等很多。
平臺方面比較的話,應該是拿.Net平臺和JAVA平臺比,這樣的話,有一句話大致可以概括:.Net平臺跨語言,可以使用C++,C#,Vb,J#等程式碼編寫程式,且編譯出來的類庫程式等都可以互相呼叫。java語言單一但是跨平臺,可以執行在Linux,Windows等各種系統。
一句話,語言可以比較特性,但沒有絕對的優劣,適合場景便是最佳。