# 前言
最近無意間看到一個有趣的帖子:
var a = ???;
if(a == 1 && a == 12){
console.log(a);
}
這是一個JS社區(qū)拋出來的問題。第一眼看到這個問題的時候,感覺這似乎是一個無稽之談,一個變量怎么可能會同時滿足倆個條件呢!
不過后來深入思考一下,發(fā)現這類問題有點意思...
如果你也覺得不可能的話,一起隨著文章看下去。你也會覺得有點意思~
下文不僅僅涉及的是JS,還有Java等等其他語言~
# 正文
接下來咱們來嘗試解決這個問題。假設 if(a==1&&a==12)是等于 true的,那么a肯定不可能是一個“普通的變量”。它勢必要有能力在執(zhí)行的時候能夠動態(tài)改動值。
# JS版本
如果出于這種出發(fā)點,我們是不是能夠假設:如果能夠重新類似a方法的執(zhí)行方法似乎就能夠做到這種結果。
接下來這里貼一種答案:

看到這個答案,我猜搞Java或其他面向對象語言的同學有些“懵逼”。不過如果仔細看,仔細想其實也是可能從中看出一些解題思路的。
當然可能有JS的小伙伴想要求解答,這里碰巧寫過解析,這里就貼出他的文章地址
看了JS的答案,我一直順著這個解題思路再想:Java中有沒有可能完成這個等式?只能說自己“功力太淺”始終沒有找到合適的解決方式...因此自己就Google了一下,發(fā)現果然有“閑的蛋疼”的人提供了答案,甚至還提供了多種版本:
# 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ā),它既可以考察解題者的語言特性掌握程度;也可以考察出解題者對待問題,嘗試解決問題的方法論。學習這條路上,任重而道遠...
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍┟嬖囶}資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網盤了,歡迎下載!
審核編輯 :李倩
-
JAVA
+關注
關注
20文章
3001瀏覽量
116419 -
JS
+關注
關注
0文章
79瀏覽量
18986
原文標題:if(a==1 && a==2 && a==3),為true,你敢信???
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
R&S SMC100A射頻信號源的主要特點及應用分析
R&S FSL6臺式信號分析儀的功能特點及應用范圍
歐拉 Summit 2021 安全&可靠性&運維專場:主流備份技術探討
單片機STC15雙機通信&異步串行通信&Proteus
485&&Modbus協議
串口mpu6050 && 透傳模塊(LC12S_V2)教程
存儲類&作用域&生命周期&鏈接屬性
A2B車載音頻總線-車機音頻&麥克風陣列測試
如何區(qū)分Java中的&和&&
HarmonyOS &潤和HiSpark 實戰(zhàn)開發(fā),“碼”上評選活動,邀您來賽!!!
你使用shell腳本中的2>&1了嗎?
攝像機&雷達對車輛駕駛的輔助
FS201資料(pcb & DEMO & 原理圖)
onsemi LV/MV MOSFET 產品介紹 & 行業(yè)應用
if(a==1 && a==2 && a==3),為true,你敢信?
評論