if(a==1 && a==2 && a==3),为true,你敢信???

Posted androidstarjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了if(a==1 && a==2 && a==3),为true,你敢信???相关的知识,希望对你有一定的参考价值。


 

点击上方蓝色“终端研发部”,选择“设为星标”


 
学最好的别人,做最好的我们

来源:toutiao.com/i6805578326279717390

# 前言

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

var 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,也算是咱们解题思路的上最直接的帮手...

# 尾声

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

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

BAT等大厂Java面试经验总结


 

 

想获取 Java大厂面试题学习资料

扫下方二维码回复「BAT」就好了

回复 【加群】获取github掘金交流群
回复 【电子书】获取2020电子书教程
回复 【C】获取全套C语言学习知识手册
回复 【Java】获取java相关的视频教程和资料
回复 【爬虫】获取SpringCloud相关多的学习资料
回复 【Python】即可获得Python基础到进阶的学习教程
回复 【idea破解】即可获得intellij idea相关的破解教程
关注我gitHub掘金,每天发掘一篇好项目,学习技术不迷路!


回复 【idea激活】即可获得idea的激活方式

回复 【Java】获取java相关的视频教程和资料

回复 【SpringCloud】获取SpringCloud相关多的学习资料

回复 【python】获取全套0基础Python知识手册

回复 【2020】获取2020java相关面试题教程

回复 【加群】即可加入终端研发部相关的技术交流群

阅读更多

为什么HTTPS是安全的

因为BitMap,白白搭进去8台服务器...

《某厂内部SQL大全 》.PDF

字节跳动一面:i++ 是线程安全的吗?

大家好,欢迎加我微信,很高兴认识你!

在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!


如果喜欢就给个“在看

以上是关于if(a==1 && a==2 && a==3),为true,你敢信???的主要内容,如果未能解决你的问题,请参考以下文章

if(a==1 && a==2 && a==3),为true,你敢信???

if(a==1 && a==2 && a==3),为true,你敢信???

if(a==1 && a==2 && a==3),为true,你敢信???

if(a==1 && a==2 && a==3),为true,你敢信???

if(a==1 && a==2 && a==3),为true,你敢信???

if(a==1 && a==2 && a==3) 结果为 true,怎么做到的?打破你的认知!