if(a==1 && a==2 && a==3),为true,你敢信???
点击上方“码农突围”,马上关注
这里是码农充电第一站,回复“666”,获取一份专属大礼包真爱,请设置“星标”或点个“在看
真爱,请设置“星标”或点个“在看
前言
最近无意间看到一个有趣的帖子:
var
if
console
a = ???;
if
(a ==
1 && a ==
12){
console
.log(a);
}
这是一个JS社区抛出来的问题。第一眼看到这个问题的时候,感觉这似乎是一个无稽之谈,一个变量怎么可能会同时满足俩个条件呢!
不过后来深入思考一下,发现这类问题有点意思...
如果你也觉得不可能的话,一起随着文章看下去。你也会觉得有点意思~
下文不仅仅涉及的是JS,还有Java等等其他语言~
正文
接下来咱们来尝试解决这个问题。假设 if(a==1&&a==12)是等于 true的,那么a肯定不可能是一个“普通的变量”。它势必要有能力在执行的时候能够动态改动值。
一、JS版本
如果出于这种出发点,我们是不是能够假设:如果能够重新类似a方法的执行方法似乎就能够做到这种结果。
接下来这里贴一种答案:
看到这个答案,我猜搞Java或其他面向对象语言的同学有些“懵逼”。不过如果仔细看,仔细想其实也是可能从中看出一些解题思路的。
当然可能有JS的小伙伴想要求解答,这里碰巧写过解析,这里就贴出他的文章地址
看了JS的答案,我一直顺着这个解题思路再想:Java中有没有可能完成这个等式?只能说自己“功力太浅”始终没有找到合适的解决方式...因此自己就Google了一下,发现果然有“闲的蛋疼”的人提供了答案,甚至还提供了多种版本:
二、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,也算是咱们解题思路的上最直接的帮手...
尾声
写这篇文章其实并不是为了去深挖这些语言特性,只是单纯的觉得很有意思。
如果从这个题目本身出发,它既可以考察解题者的语言特性掌握程度;也可以考察出解题者对待问题,尝试解决问题的方法论。学习这条路上,任重而道远...
阅读原文
关键词
方法
问题
答案
文章
解题思路
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。