Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設計、大廠真題等,在線隨時刷題!
前言
最近無意間看到一個有趣的帖子:
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í)行方法似乎就能夠做到這種結(jié)果。
接下來這里貼一種答案:
![]()
看到這個答案,我猜搞Java或其他面向?qū)ο笳Z言的同學有些“懵逼”。不過如果仔細看,仔細想其實也是可能從中看出一些解題思路的。
當然可能有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,也算是咱們解題思路的上最直接的幫手…更多面試資料,公眾號Java精選,回復java面試,獲取在線面試資料,支持隨時隨地刷題。
![]()
尾聲
寫這篇文章其實并不是為了去深挖這些語言特性,只是單純的覺得很有意思。
如果從這個題目本身出發(fā),它既可以考察解題者的語言特性掌握程度;也可以考察出解題者對待問題,嘗試解決問題的方法論。學習這條路上,任重而道遠...
作者:碼農(nóng)登陸 https://toutiao.com/i6805578326279717390
公眾號“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡,系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請聯(lián)系,筆者會第一時間刪除處理!
最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!
文章有幫助的話,點在看,轉(zhuǎn)發(fā)吧!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.