<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>

          if(a==1 && a==2 && a==3),為true,你敢信???

          共 1921字,需瀏覽 4分鐘

           ·

          2021-06-02 20:38

          來源:https://www.toutiao.com/i6805578326279717390


          前言

          最近無意間看到一個有趣的帖子:

          var a = ???;
          if(a == 1 && a == 12){  
            console.log(a);
          }

          這是一個JS社區(qū)拋出來的問題。第一眼看到這個問題的時候,感覺這似乎是一個無稽之談,一個變量怎么可能會同時滿足倆個條件呢!

          不過后來深入思考一下,發(fā)現(xiàn)這類問題有點意思...

          如果你也覺得不可能的話,一起隨著文章看下去。你也會覺得有點意思~

          下文不僅僅涉及的是JS,還有Java等等其他語言~

          正文

          接下來咱們來嘗試解決這個問題。假設 if(a==1&&a==12)是等于 true的,那么a肯定不可能是一個“普通的變量”。它勢必要有能力在執(zhí)行的時候能夠動態(tài)改動值。

          一、JS版本

          如果出于這種出發(fā)點,我們是不是能夠假設:如果能夠重新類似a方法的執(zhí)行方法似乎就能夠做到這種結果。

          接下來這里貼一種答案:

          看到這個答案,我猜搞Java或其他面向對象語言的同學有些“懵逼”。不過如果仔細看,仔細想其實也是可能從中看出一些解題思路的。

          當然可能有JS的小伙伴想要求解答,這里碰巧寫過解析,這里就貼出他的文章地址

          看了JS的答案,我一直順著這個解題思路再想:Java中有沒有可能完成這個等式?只能說自己“功力太淺”始終沒有找到合適的解決方式...因此自己就Google了一下,發(fā)現(xiàn)果然有“閑的蛋疼”的人提供了答案,甚至還提供了多種版本:

          二、Java版本

          這里就直接貼答案了,雖然不能說非常的貼近于題目,但也著實展示了其中的巧妙:

          Class cache = Integer.class.getDeclaredClasses()[0];
          Field c = cache.getDeclaredField("cache");
          c.setAccessible(true);
          Integer[] array = (Integer[]) c.get(cache);
          // array[129] is 1
          array[130] = array[129]; 
          // Set 2 to be 1
          array[131] = array[129]; 
          // Set 3 to be 1
          Integer a = 1;
          if(a == (Integer)1 && a == (Integer)2 && a == (Integer)3){ 
             System.out.println("Success");
          }

          另一個答案,說實話比較“牛逼”了:

          這里用到了PowerMockRunner,也算是咱們解題思路的上最直接的幫手...

          尾聲

          寫這篇文章其實并不是為了去深挖這些語言特性,只是單純的覺得很有意思。

          如果從這個題目本身出發(fā),它既可以考察解題者的語言特性掌握程度;也可以考察出解題者對待問題,嘗試解決問題的方法論。學習這條路上,任重而道遠...

          往期推薦


          想要搭建個人博客?這4個Java 開源博客系統(tǒng),真香
          畢業(yè)設計:Java簡易學生宿舍管理系統(tǒng)
          SpringBoot+Vue 完整的外賣系統(tǒng),手機端和后臺管理,附源碼!
          帶工作流的SpringBoot后臺管理項目,一個企業(yè)級快速開發(fā)解決方案
          哈哈哈,徒手給小區(qū)開發(fā)一套系統(tǒng)!看能換一個停車位不....

          最近面試BAT,整理一份面試資料Java面試BAT通關手冊,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結構等等。
          獲取方式:關注公眾號并回復 java 領取,更多內容陸續(xù)奉上。
          明天見(??ω??)??


          瀏覽 60
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  亚洲天堂AV免费在线观看 | 日韩网址在线 | 狼友视频主页 | 大香蕉性爱 | 亚洲欧美另类在线 |