if(a==1 && a==2 && a==3),为true,你敢信?
来源:     阅读:424
易浩激活码
发布于 2022-03-15 14:02
查看主页

最近无意间看到一个有趣的帖子:

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

这是一个JS社区抛出来的问题。第一眼看到这个问题的时候,感觉这似乎是一个无稽之谈,一个变量怎样可能会同时满足两个条件呢!

不过后来深入思考一下,发现这类问题有点意思...

假如你也觉得不可能的话,一起随着文章看下去。你也会觉得有点意思~

下文不仅仅涉及的是JS,还有Java等等其余语言~

正文

接下来咱们来尝试处理这个问题。假设 if(a==1&&a==12)是等于 true的,那么a一定不可能是一个“普通的变量”。它势必要有能力在执行的时候能够动态改动值。

一、JS版本

假如出于这种出发点,我们是不是能够假设:假如能够重新相似a方法的执行方法似乎就能够做到这种结果。

接下来这里贴一种答案:

image.png

看到这个答案,我猜搞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 1array[130] = array[129]; // Set 2 to be 1array[131] = array[129]; // Set 3 to be 1Integer a = 1;if(a == (Integer)1 && a == (Integer)2 && a == (Integer)3){    System.out.println("Success");}

另一个答案,说实话比较“牛逼”了:

这里用到了PowerMockRunner,也算是咱们解题思路的上最直接的帮手...

image.png

尾声

写这篇文章其实并不是为了去深挖这些语言特性,只是单纯地觉得很有意思。

假如从这个题目本身出发,它既可以考察解题者的语言特性掌握程度;也可以考察出解题者对待问题,尝试处理问题的方法论。学习这条路上,任重而道远..

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 软件环境
相关推荐
ApacheCN 翻译活动进度声明 2019.4.23
蚂蚁花呗,蚂蚁金服面试3+2次,有惊无险终通过!(已收到offer)
intellij idea tomcat热部署配置
vue webpack打包后图片路径错误的处理方法
【集中注意力辅助工具】UnDistracted for Mac破解版1.78
首页
搜索
订单
购物车
我的