最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C#和Java到底有什么區(qū)別?程序員研讀4小時(shí)后得出了8%的結(jié)論

2023-01-26 12:42 作者:科技品鑒官  | 我要投稿

在沒(méi)有具體看C#的學(xué)習(xí)文檔之前,即使我已經(jīng)有了八年左右的Java開(kāi)發(fā)經(jīng)驗(yàn), 我依然對(duì)掌握C#沒(méi)有多大的信心, 但是在我花了四個(gè)小時(shí)以直播的方式看完了W3C上,關(guān)于C#的介紹文檔之后,我發(fā)現(xiàn)C#原來(lái)是這樣子。

先說(shuō)一下我的結(jié)論,單純從語(yǔ)言自身的角度來(lái)講,C#跟Java的相似程度,我在直播之后給出了一個(gè)直覺(jué)的92%的估計(jì)值, 至于其他方面后面會(huì)詳談。

此時(shí)有人可能會(huì)問(wèn),你已經(jīng)有了八年的Java開(kāi)發(fā)經(jīng)驗(yàn),為什么還想著轉(zhuǎn)向C#而不轉(zhuǎn)向當(dāng)前大火的Rust Python Go等語(yǔ)言呢? 原因很簡(jiǎn)單,我想寫(xiě)一些windows平臺(tái)上桌面端的一些小程序,然后順便學(xué)習(xí)一下基于unity引擎的游戲開(kāi)發(fā), 為了同時(shí)滿(mǎn)足這兩方面的需求,C#是不二之選。

言歸正傳,我先來(lái)詳細(xì)說(shuō)一下我那個(gè)92%的相似值,是如何靠直覺(jué)估計(jì)出來(lái)的。

語(yǔ)法

在C#與Java的語(yǔ)法上, 前者使用的是命名空間的概念,而后者有包的概念,其實(shí)這兩個(gè)概念本質(zhì)上是相同的, 另外C#在字符的大小寫(xiě)上比較敏感, 而Java在這方面就弱很多, 所以我們可以看到C#的Main方法,它的M是大寫(xiě)的,而Java中的main全都是小寫(xiě)的,除此之外,其他的相同的。

控制臺(tái)

在控制臺(tái)的輸出上,C#用的是Console類(lèi)的WriteLine,而Java使用的是System類(lèi)IO里邊的rprintln,除此之外,其他沒(méi)什么差別, 我這里雖然說(shuō)的比較具體,但是這里的一一對(duì)應(yīng)關(guān)系是十分明顯的,所以除了名字不一樣,含義與功能是一樣的,在這程序員的眼中只是個(gè)變量名的差異而已。

注釋

在注釋的書(shū)寫(xiě)方式上,在變量的定義方式以及在變量的初始化等方式上,二者可以說(shuō)是一模一樣的。

數(shù)據(jù)類(lèi)型

在內(nèi)置的數(shù)據(jù)類(lèi)型上,二者也是幾乎一樣的,只不過(guò)有些數(shù)據(jù)類(lèi)型的名稱(chēng),有的字母是大寫(xiě)的字母是小寫(xiě)而已,另外一個(gè)比較大的差別就是,Java有原生數(shù)據(jù)類(lèi)型對(duì)應(yīng)的包裝類(lèi), 我沒(méi)看到C#有這樣的概念,這是其中的一個(gè)小小差別。

類(lèi)型轉(zhuǎn)換

在基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)換上, C#貌似更優(yōu)雅一些,它不僅可以像Java一樣在變量的前面用小括號(hào)加上數(shù)據(jù)類(lèi)型的方式進(jìn)行隱式轉(zhuǎn)換之外,還提供了一個(gè)專(zhuān)門(mén)的Convert類(lèi)進(jìn)行顯示的轉(zhuǎn)換,這個(gè)確實(shí)是C#感覺(jué)更加的優(yōu)雅一些。

運(yùn)算符

在數(shù)學(xué)運(yùn)算符、邏輯運(yùn)算符、比較運(yùn)算符以及賦值運(yùn)算符上,C#與Java看起來(lái)沒(méi)有什么不同,只是我聽(tīng)說(shuō)C#的運(yùn)算符支持重載而Java的運(yùn)算符不支持重載,這塊W3C上沒(méi)有介紹,在內(nèi)置的數(shù)學(xué)類(lèi)Math的方法上,C#與Java提供的方法也是大同小異的。

字符串

在常用的字符串類(lèi)型上,第一個(gè)明顯的區(qū)別,就是一個(gè)小小的S字母的大小寫(xiě)的問(wèn)題,C#是小s開(kāi)頭的string,而Java是大S開(kāi)頭的String,另外C#還專(zhuān)門(mén)介紹了一個(gè)使用插值法進(jìn)行字符串連接的操作 其實(shí)我覺(jué)得其實(shí)際意義并不大,因?yàn)镴ava中也有類(lèi)似于C和C++那種字符串拼接與格式化的相關(guān)操作。

條件控制

布爾數(shù)據(jù)類(lèi)型這塊二者也是一樣的,for循環(huán)二者也是一樣的,Where循環(huán)二者也是一樣的,do-while循環(huán)二者也是一樣的,switch語(yǔ)句二也是一樣的, 如果非得從雞蛋里挑骨頭找出二者的區(qū)別,說(shuō)實(shí)話(huà)我真找不到。

數(shù)組

在數(shù)組的基本操作方面,Java和C#也沒(méi)有明顯的區(qū)別,不過(guò)我在別的地方看到的一句話(huà),說(shuō)是C#中,數(shù)組是對(duì)象的直接規(guī)格化,而Java中數(shù)組則是系統(tǒng)的規(guī)格化,說(shuō)實(shí)話(huà)我不明白是什么意思,后續(xù)在實(shí)際用的時(shí)候在做詳細(xì)研究吧。

了解了這些基本東西之后,你能具體找到二者之間的多少區(qū)別呢,說(shuō)實(shí)話(huà)區(qū)別應(yīng)該沒(méi)有5%吧。

面向?qū)ο?/span>

W3C在后續(xù)介紹面向?qū)ο蟮母拍睿^承的概念,多態(tài)的概念,訪(fǎng)問(wèn)權(quán)限控制的時(shí)候, 二者可以說(shuō)是一模一樣,因?yàn)檫@些概念并不是屬于某一種語(yǔ)言的,而是一種共通的理念, 但是如果非要找出來(lái)幾點(diǎn)不同,我現(xiàn)在記得有3點(diǎn):

第一個(gè)是在訪(fǎng)問(wèn)權(quán)限控制這塊,C#除了有public protected privite之外,還多了一種叫做internal的控制權(quán)限, 至于這個(gè)訪(fǎng)問(wèn)權(quán)限能控制到什么精細(xì)程度,只有到實(shí)際開(kāi)發(fā)的時(shí)候才能體會(huì)得到。

第二點(diǎn)就是在抽象類(lèi)這一塊兒以及方法的重載這一塊兒,C#沿襲了C++中的virtual關(guān)鍵字用于表示這個(gè)方法是一個(gè)虛方法, 而且當(dāng)基類(lèi)和子類(lèi)有同名方法的時(shí)候, 如果選擇用基類(lèi)的對(duì)象來(lái)調(diào)用這個(gè)方法,C#的選擇是,基類(lèi)的方法會(huì)覆蓋掉子類(lèi)的方法,而Java中則是子類(lèi)的方法會(huì)覆蓋基類(lèi)的方法,這是一個(gè)明顯的區(qū)別。

第三,在繼承與接口這塊兒,二者是相同的,都只允許單繼承多實(shí)現(xiàn),4個(gè)小時(shí)之后,我記憶最深刻的是,在C#中,value這個(gè)詞,竟然是一個(gè)關(guān)鍵字,因?yàn)镃#相較于Java多了一個(gè)屬性的概念,這個(gè)屬性說(shuō)白了,其實(shí)就是Java中g(shù)et/set方法的一個(gè)不同形式的實(shí)現(xiàn)方式而已。

得出結(jié)論

到這應(yīng)該差不多了吧,如果單從語(yǔ)言的本身上來(lái)講,二者的差別微乎其微, 在5%的基礎(chǔ)之上,再擴(kuò)展3%的一個(gè)誤差,二者在單純語(yǔ)言上的差別,也就8%左右。 這里大家一定要看清楚,我說(shuō)的是以單純語(yǔ)言這個(gè)比較角度。

核心困難點(diǎn)

但是在四個(gè)小時(shí)的轉(zhuǎn)換學(xué)習(xí)之后,你真的能夠從Java快速切換到C#進(jìn)行生產(chǎn)級(jí)的開(kāi)發(fā)嗎?這絕對(duì)是不可能的,因?yàn)槟阕屑?xì)想一想,你用Java開(kāi)發(fā)的時(shí)候,你用Java語(yǔ)言本身的東西有多少?你估計(jì)80%用的都是框架提供的東西,而框架正是Java的靈魂之所在!

所以如果想從Java正式切換到C#,那么就不得不做一件事情,那就是梳理出自己在Java中常用的一些框架, 然后再去C#中找到與之映射與匹配的框架,然后再去這些框架中搜尋那些常用的API, 而這些API的記憶與描述文檔的閱讀,至少得花大約100個(gè)小時(shí)的時(shí)間。

至于什么跨平臺(tái)什么性能這些差距,這玩意兒根本就不是普通程序員應(yīng)該考慮的問(wèn)題, 因?yàn)槟惝?dāng)前入職的公司就已經(jīng)有了明確的選擇,而這個(gè)選擇的依據(jù),就是這個(gè)公司的存量代碼。

杰哥是干啥的?

給杰哥點(diǎn)個(gè)關(guān)注吧,后期杰哥將會(huì)基于C#進(jìn)行桌面端小工具,以及基于unity引擎游戲的開(kāi)發(fā),幾乎每天都會(huì)直播相關(guān)的內(nèi)容,可以說(shuō)是一個(gè)很稱(chēng)職的程序員了。


C#和Java到底有什么區(qū)別?程序員研讀4小時(shí)后得出了8%的結(jié)論的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
津市市| 呈贡县| SHOW| 通州区| 鸡东县| 洪雅县| 侯马市| 大竹县| 孟州市| 修水县| 永宁县| 华安县| 武威市| 无锡市| 沁源县| 南京市| 永年县| 红原县| 盐城市| 昌吉市| 满洲里市| 贵南县| 金溪县| 嘉义市| 来凤县| 罗定市| 安仁县| 青岛市| 正宁县| 精河县| 阿勒泰市| 南靖县| 遵义市| 黔东| 罗源县| 营山县| 云浮市| 新乡市| 沽源县| 扬中市| 城市|