if(a==1 && a==2 && a==3),為true,你敢信???
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
真香!24W字的Java面試手冊(cè)(點(diǎn)擊查看)
最近無(wú)意間看到一個(gè)有趣的帖子:
var a = ???;
if(a == 1 && a == 12){
console.log(a);
}
這是一個(gè)JS社區(qū)拋出來(lái)的問(wèn)題。第一眼看到這個(gè)問(wèn)題的時(shí)候,感覺(jué)這似乎是一個(gè)無(wú)稽之談,一個(gè)變量怎么可能會(huì)同時(shí)滿足倆個(gè)條件呢!
不過(guò)后來(lái)深入思考一下,發(fā)現(xiàn)這類問(wèn)題有點(diǎn)意思...
如果你也覺(jué)得不可能的話,一起隨著文章看下去。你也會(huì)覺(jué)得有點(diǎn)意思~
下文不僅僅涉及的是JS,還有Java等等其他語(yǔ)言~
正文
接下來(lái)咱們來(lái)嘗試解決這個(gè)問(wèn)題。假設(shè) if(a==1&&a==12)是等于 true的,那么a肯定不可能是一個(gè)“普通的變量”。它勢(shì)必要有能力在執(zhí)行的時(shí)候能夠動(dòng)態(tài)改動(dòng)值。
一、JS版本
如果出于這種出發(fā)點(diǎn),我們是不是能夠假設(shè):如果能夠重新類似a方法的執(zhí)行方法似乎就能夠做到這種結(jié)果。
接下來(lái)這里貼一種答案:

看到這個(gè)答案,我猜搞Java或其他面向?qū)ο笳Z(yǔ)言的同學(xué)有些“懵逼”。不過(guò)如果仔細(xì)看,仔細(xì)想其實(shí)也是可能從中看出一些解題思路的。
當(dāng)然可能有JS的小伙伴想要求解答,這里碰巧寫(xiě)過(guò)解析,這里就貼出他的文章地址
看了JS的答案,我一直順著這個(gè)解題思路再想:Java中有沒(méi)有可能完成這個(gè)等式?只能說(shuō)自己“功力太淺”始終沒(méi)有找到合適的解決方式...因此自己就Google了一下,發(fā)現(xiàn)果然有“閑的蛋疼”的人提供了答案,甚至還提供了多種版本:
二、Java版本
這里就直接貼答案了,雖然不能說(shuō)非常的貼近于題目,但也著實(shí)展示了其中的巧妙:
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");
}
另一個(gè)答案,說(shuō)實(shí)話比較“牛逼”了:
這里用到了PowerMockRunner,也算是咱們解題思路的上最直接的幫手...

尾聲
寫(xiě)這篇文章其實(shí)并不是為了去深挖這些語(yǔ)言特性,只是單純的覺(jué)得很有意思。
如果從這個(gè)題目本身出發(fā),它既可以考察解題者的語(yǔ)言特性掌握程度;也可以考察出解題者對(duì)待問(wèn)題,嘗試解決問(wèn)題的方法論。學(xué)習(xí)這條路上,任重而道遠(yuǎn)...
如有文章對(duì)你有幫助,
歡迎關(guān)注??、點(diǎn)贊??、轉(zhuǎn)發(fā)??!
推薦, Java面試手冊(cè) 內(nèi)容包括網(wǎng)絡(luò)協(xié)議、Java基礎(chǔ)、進(jìn)階、字符串、集合、并發(fā)、JVM、數(shù)據(jù)結(jié)構(gòu)、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux以及各種中間件(Dubbo、Nginx、Zookeeper、MQ、Kafka、ElasticSearch)等等... 點(diǎn)擊文末“閱讀原文”可直達(dá)

