<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          猜猜 Java 為什么不支持運(yùn)算符重載?

          共 1318字,需瀏覽 3分鐘

           ·

          2020-07-28 17:01


          作者 |?Yujiaao

          來源 |?https://segmentfault.com/a/1190000019962661

          另一個(gè)類似的 Java 面試難題。為什么 C++ 支持運(yùn)算符重載而?Java?不支持??有人可能會(huì)說 + 運(yùn)算符在?Java?中已被重載用于字符串連接,不要被這些論據(jù)所欺騙。

          與 C++ 不同,Java 不支持運(yùn)算符重載。Java 不能為程序員提供自由的標(biāo)準(zhǔn)算術(shù)運(yùn)算符重載,例如+, -,*和/等。如果你以前用過 C++,那么?Java?與 C++ 相比少了很多功能,例如?Java?不支持多重繼承,Java中沒有指針,Java中沒有地址引用傳遞。

          另一個(gè)類似的問題是關(guān)于 Java 通過引用傳遞,這主要表現(xiàn)為 Java 是通過值還是引用傳參。雖然我不知道背后的真正原因,但我認(rèn)為以下說法有些道理,為什么 Java 不支持運(yùn)算符重載。

          1) 簡單性和清晰性。

          清晰性是?Java?設(shè)計(jì)者的目標(biāo)之一。設(shè)計(jì)者不是只想復(fù)制語言,而是希望擁有一種清晰,真正面向?qū)ο蟮恼Z言。添加運(yùn)算符重載比沒有它肯定會(huì)使設(shè)計(jì)更復(fù)雜,并且它可能導(dǎo)致更復(fù)雜的編譯器, 或減慢?JVM,因?yàn)樗枰鲱~外的工作來識(shí)別運(yùn)算符的實(shí)際含義,并減少優(yōu)化的機(jī)會(huì), 以保證?Java?中運(yùn)算符的行為。

          2) 避免編程錯(cuò)誤。

          Java 不允許用戶定義的運(yùn)算符重載,因?yàn)槿绻试S程序員進(jìn)行運(yùn)算符重載,將為同一運(yùn)算符賦予多種含義,這將使任何開發(fā)人員的學(xué)習(xí)曲線變得陡峭,事情變得更加混亂。

          據(jù)觀察,當(dāng)語言支持運(yùn)算符重載時(shí),編程錯(cuò)誤會(huì)增加,從而增加了開發(fā)和交付時(shí)間。由于?Java和?JVM?已經(jīng)承擔(dān)了大多數(shù)開發(fā)人員的責(zé)任,如在通過提供垃圾收集器進(jìn)行內(nèi)存管理時(shí),因?yàn)檫@個(gè)功能增加污染代碼的機(jī)會(huì), 成為編程錯(cuò)誤之源, 因此沒有多大意義。

          3) JVM復(fù)雜性。

          JVM的角度來看,支持運(yùn)算符重載使問題變得更加困難。通過更直觀,更干凈的方式使用方法重載也能實(shí)現(xiàn)同樣的事情,因此不支持 Java 中的運(yùn)算符重載是有意義的。與相對(duì)簡單的?JVM?相比,復(fù)雜的?JVM?可能導(dǎo)致?JVM?更慢,并為保證在?Java?中運(yùn)算符行為的確定性從而減少了優(yōu)化代碼的機(jī)會(huì)。

          4) 讓開發(fā)工具處理更容易。

          這是在?Java?中不支持運(yùn)算符重載的另一個(gè)好處。省略運(yùn)算符重載后使語言更容易處理,如靜態(tài)分析等,這反過來又更容易開發(fā)處理語言的工具,例如 IDE 或重構(gòu)工具。Java 中的重構(gòu)工具遠(yuǎn)勝于 C++。


          -?END?-

          往期推薦



          Spring Boot自定義Annotation實(shí)現(xiàn)接口自動(dòng)冪

          程序員副業(yè)接私活網(wǎng)站分享~

          360 倍性能提升!頑強(qiáng)的4 次版本迭代

          程序員的好別人不懂,阿姨懂!快到碗里來!

          Java 性能優(yōu)化:35 個(gè)你注意不到的小細(xì)節(jié)


          下方二維碼關(guān)注我

          互聯(lián)網(wǎng)草根,堅(jiān)持分享技術(shù)、創(chuàng)業(yè)產(chǎn)品心得和總結(jié)~



          點(diǎn)擊“閱讀原文”,領(lǐng)取 2020 年最新免費(fèi)技術(shù)資料大全

          ↓↓↓
          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美美女操逼 | 尻屄网| 久色网五月天 | 在线人妻| 四虎操逼|