JAVA和.net的區別

來源:互聯網
上載者:User

JAVA和.net的區別

   我們目前對.NET的理解大部分可以歸納為:起初它是Java平台(注意是平台,不要跟Java語言搞混淆)的一個複製品,後來慢慢演變,有了自己的特性。由於Java平台最顯著的特點就是“平台獨立性”(或者說不知道誰發明的Write once,Run anywhere這個話)。理論上,你可以寫一個程式編譯完後,跑在任何一個安裝有JVM的作業系統上。大部分人認為.NET的出現是效仿Sun公司的這個偉大的概念——平台獨立性,從而與Java抗衡。再後來又有一些人不知道從哪得出的結論說,就算有像Mono這樣的非Windows平台.NET CLR,也有好多.NET程式不能移植到其他動作系統中,比如Winform幾乎不能通過Mono移植到Linux上去,因此得出一個駭人聽聞的結論:微軟連模仿都沒模仿完整,居然是偽跨平台。

  以上就是目前我見過的最多的結論:.NET致命的弱點,就是它不是真正的跨平台。為此,我有以下幾點說明:

  (1).NET平台出現的意義不是支援跨平台,它出現的目的只是最佳化傳統的Windows開發模式,使Windows開發更加方便快捷。它解決了COM時代的Dll Hell問題(.Net程式集版本控制),整合了多種語言(方便各種各樣的程式員),每種語言編寫的組件(程式集)之間可以毫無障礙地通訊,集合ob ject-Oriented和Component-Oriented於一體,你可以從一個組件(dll)中派生出一個新的類型而不需要該類型的所有源碼(這個UnManaged時代不可能有),真正的實現了二進位相容性(你改動程式集中的某一個公開成員,如果使用這個程式集的用戶端程式沒有使用到這個公開成員,那麼用戶端完全不需要重新編譯),提供C++中沒有的記憶體管理,支援異常處理等等。嚴格來說,微軟發布.NET的第一天就是為了它的Windows,就沒打算讓你寫的程式跑在其他動作系統之上(微軟到目前為止還沒有發布官方的非Windows平台的.NET CLR)。

  (2)再說Java平台和.NET兩者追求的目標,前者從出現開始就認為:在互連網世界中,我要讓一種語言跑在任何一個作業系統中;而後者則認為:在互連網世界中,我要讓所有的語言都跑在同一個作業系統中(Windows)。兩個平台從一開始設計的目的就不一樣。

  (3)兩者強調的重點不同:

  如,紅色部分都是其他人擴充出來的功能。

  (4)上面3中所述,兩者平台結構類似,我不清楚微軟到底有沒有剽竊Java,但可以肯定的是如果兩者東家原意,兩個平台都是可以做到“跨平台”和“支援多語言”的。 至於為什麼說使用Mono還不能把有些.NET程式移植到Linux,這個很容易解釋,微軟本來就沒打算將.NET程式移植到其他平台,.NET中包含的一些豐富架構都是與Windows緊密相關的,你使用了這些架構,是很難再把它們翻譯成非Windows平台中可以執行的代碼。而且,Java也並不是完全的跨平台,跟你開發實際用到的架構有關。出現以上不能移植的情況,關鍵有兩個地方,一個是你開發時使用的架構,一個是CLR(或者JVM),要看後者到底有沒有能力把前者翻譯成對應平台的可執行代碼。

  綜上,兩個平台的側重點不同,你覺得比較蘋果和香蕉哪個好吃有用嗎?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.