zoukankan      html  css  js  c++  java
  • if(a==1 && a==2 && a==3) 结果为 true,怎么做到的?打破你的认知!

    来源:https://www.toutiao.com/i6805578326279717390

    前言

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

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

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

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

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

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

    正文

    接下来咱们来尝试解决这个问题。假设 if(a1&&a12)是等于 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,也算是咱们解题思路的上最直接的帮手...

    尾声

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

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

    近期热文推荐:

    1.1,000+ 道 Java面试题及答案整理(2021最新版)

    2.别在再满屏的 if/ else 了,试试策略模式,真香!!

    3.卧槽!Java 中的 xx ≠ null 是什么新语法?

    4.Spring Boot 2.5 重磅发布,黑暗模式太炸了!

    5.《Java开发手册(嵩山版)》最新发布,速速下载!

    觉得不错,别忘了随手点赞+转发哦!

  • 相关阅读:
    Python导入运行的当前模块报错
    关于相对性的思考
    B+树
    DNS:从零搭建公司内网DNS服务器
    【05】Saltstack:配置详解
    【04】Saltstack:配置管理
    【03】Saltstack:远程执行
    【02】Saltstack:Grains and Pillar
    【01】Saltstack:从零开始 Saltstack
    【08】Kubernets:Service
  • 原文地址:https://www.cnblogs.com/javastack/p/15374420.html
Copyright © 2011-2022 走看看