起源:https://www.toutiao.com/i6805...
前言
最近无意间看到一个乏味的帖子:
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 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,也算是咱们解题思路的上最间接的帮手...
序幕
写这篇文章其实并不是为了去深挖这些语言个性,只是单纯的觉得很有意思。
如果从这个题目自身登程,它既能够考查解题者的语言个性把握水平;也能够考查出解题者看待问题,尝试解决问题的方法论。学习这条路上,任重而道远...
近期热文举荐:
1.1,000+ 道 Java面试题及答案整顿(2021最新版)
2.别在再满屏的 if/ else 了,试试策略模式,真香!!
3.卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!