熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

90%的重疊10%的較量 ——C#與Java述評

2013-11-15 11:45:42  來源: JSP教程 

  自C#誕生之日起關於C#與Java之間的論戰便此起彼伏至今不辍拋開Microsoft與Sun之間的恩怨與口角客觀地從技術上講C#與Java都是對傳統面向對象程序設計在組件化軟件時代的革新之果可謂殊途同歸雖說兩種語言有著%的重疊但那另外%的較量也往往能夠左右一架天平的方向
  
  
  
  C#和Java都提出了對傳統C++艱深晦澀的語法語義的改良在語法方面兩者都擯棄了C++中函數及其參數的const修飾宏代換全局變量全局函數等許多華而不實的地方在繼承方面兩者都采用了更易於理解和建構的單根繼承和多接口實現的方式;在源代碼組織方面都提出了聲明與實現於一體的更好的邏輯封裝在類型系統方面兩個語言都在中間語言IL或字節代碼的基礎上提出了映射這樣的概念徹底革新了傳統C++運行時類型鑒別的問題
  
  
  
  但在大刀闊斧地對C++進行改革的同時C#顯得更為保守它對很多原來C++中很好的特性予以了保留如基於棧分配的輕量級結構類型枚舉類型引用輸出數組修飾的參數傳遞方式等這些在Java中都被很可惜地丟掉了在基本類型和單根繼承的對象之間的類型統一方面C#提出的box/unbox要比Java的包裝類顯得高明效率也更高
  
  
  
  對C++不安全的指針及內存分配方式C#和Java都采用了托管執行環境而效率問題卻是托管執行環境一直以來遭人诟病的地方Java虛擬機(JVM)解釋執行的方式曾經讓很多開發者覺得慢得無法忍受不過C#的JIT編譯方式卻為C#在這塊戰場上贏得了贊聲一片某些C#托管代碼甚至比傳統C++代碼都快雖然現在各廠商實現的Java平台也都一致地采取了JIT編譯方式但C#在這方面的比較優勢非常明顯——C#的目標編譯語言IL從設計初始就把效率擺在了重要的地位而Java字節代碼的設計卻有些魯莽
  
  
  
  一次編程多處執行一直是程序設計的一個訴求尤其是在現代Internet時代在跨平台方面Java的支持和實現都是為人稱道的雖然JVM的速度仍然讓人備感頭疼而C#雖然在底層構造方面對移植性進行了充分的考慮但至少目前還沒有出現成熟的經過檢驗的產品C#在跨平台方面似乎更熱衷於XML Web Services互操作而不是跨平台編程但C#通過其基礎語言構造(CLI)對二十多種主流語言對象級的互操作支持又極大地提升了C#的技術地位和COM組件廉價的互操作也為C#掙到不少分數——保持一個兼容的體系對現代軟件工業非常重要也是對廣大開發人員負責的表現
  
  
  
  從對C#的分析中我們可以強烈地感受到C#對組件編程的迷戀實際上現代軟件的組件開發潮流正是由年誕生的Java所倡導Java和C#都是對傳統C++面向組件的編程方式的革新年前就出道的Java在這方面顯然與C#不可同日而語C#通過屬性索引器委派事件操作符重載特征版本等實現了對組件編程的第一手支持雖然這些在Java中都可以通過方法接口或者適配器來間接地實現但這無論對編程效率或者邏輯設計都是一種極大的損傷——高級語言首先面對的是人而不是機器
  
  
  
  除去這些語言層面的組件支持機制NET平台也為組件的配置運行和管理提供了一攬子解決方案為組件開發量身定做的Visual Studio NET更是令人興奮這些都為C#的組件編程開辟了廣闊的天地在其他技術方面Java的微弱劣勢尚且可以忽略不計但在組件編程方面Java相較於C#卻有著不可治愈的硬傷尤其對於從C++和VB背景過來的開發人員C#在這方面有著不可抵擋的魅力和誘惑
  
  
  
  鑒於XML Web Services在下一代企業分布式計算中的地位NET平台直接在IL中間語言中內置了XMLSOAPUDDIWSDL等底層協議被構建成了面向開發人員的組件而Java是通過API集來支持Web服務雖然這種局面的形成可能僅僅是因為時間問題但從技術角度來將C#無疑比Java更新畢竟C#出現在Java之後
  
  
  
  當然語言選擇乃藝術而非技術問題開發人員選擇哪種編程語言往往會受到眾多因素的影響各自的後端平台(C# for NET Java for JEE)編程框架的支持各種語言相關工具的實現現有的系統基礎等都會對編程語言的發展產生相當的影響
  

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19571.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.