肥宅钓鱼网
当前位置: 首页 钓鱼百科

if语句执行后else if还执行吗(你敢信if语句执行完)

时间:2023-08-09 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

没错,上述的程序在本质上,main方法执行了两次。.equals这段代码是什么意思呢?首先,这段代码再次创建了一个Test类的对象实例,并在代码块中调用了Test类的main()方法,此时,由于Test类的对象实例不为空,所以,equals会返回false。此时,再次执行print()方法时,传递的flag为false,执行了else语句的逻辑。

从计算机底层原理来说,Java语句中的 if 指令和 else 指令分属于两个不同的逻辑分支,在同一段代码中,只要执行了if语句就不会执行else语句。所以,这个面试题的考点并不是让你从计算机底层原理的角度去分析问题。既然不能从计算机底层原理去分析问题,那我们需要从哪里入手分析呢?

没错,当然是从我们写的程序入手了!那么,问题来了,我们自己写的程序貌似也没有出现过执行完if语句后再执行else语句的情况呀!!别急,咱们继续往下看。

实现程序

我们先来看一段代码,如下所示。

publicclassTest{publicstaticvoidmain(String[]args){newTest().print(args==null||newTest(){{Test.main(null);}}.equals(null));}publicvoidprint(booleanflag){if(flag){System.out.println("我是if语句的分支");}else{System.out.println("我是else语句的分支");}}}

在你的IDE中运行下这段程序,没错,输出结果如下所示。

我是if语句的分支我是else语句的分支

我去,竟然真的同时执行了if语句和else语句,这是怎么回事呢?

代码分析

我们来看这段代码反编译后的结果,如下所示。

publicclassTest{publicTest(){}publicstaticvoidmain(String[]args){(newTest()).print(args==null||(newTest(){{Test.main((String[])null);}}).equals((Object)null));}publicvoidprint(booleanflag){if(flag){System.out.println("我是if语句的分支");}else{System.out.println("我是else语句的分支");}}}

看到这里,有木有一种恍然大悟的感觉呢?没错,上述的程序在本质上,main方法执行了两次。为什么会是执行了两次呢?原因就在main方法中调用print()方法时,传递的参数上。所以,我们先来看看调用print()方法传递的参数,如下所示。

args==null||(newTest(){{Test.main((String[])null);}}).equals((Object)null)

可以看到,调用print()方法传递的参数中,args == null为true,执行print()方法的if语句,这点不难理解。接下来就是要重点理解下面的代码片段了。

(newTest(){{Test.main((String[])null);}}).equals((Object)null)

这段代码是什么意思呢?首先,这段代码再次创建了一个Test类的对象实例,并在代码块中调用了Test类的main()方法,此时,由于Test类的对象实例不为空,所以,equals((Object)null)会返回false。此时,再次执行print()方法时,传递的flag为false,执行了else语句的逻辑。

是不是很神奇呢?所以,从现在开始,你要转变你的观念,这告诉我们:任何权威都不是绝对的,你要做的就是要敢于挑战权威,指出他们不对的地方!

    推荐阅读
  • oppo r11还有的买吗(OPPOR11预定价格曝光现已全面开始预约)

    不过目前暂不知道3299元的定价是否为R11的最终定价,不过对比前代R9s的起步价为2799元,如果这个价格属实,不排除OPPO希望借目前R11的超高人气,进一步冲击三千元的高端价位。OPPO的每一款新品,都会给人带来眼前一亮的感觉。最新的R11把智能拍照手机发挥的淋漓尽致。OPPO线下渠道,一直是国内其他厂商望尘莫及的。还有几天R11就正式发布了,需要这款手机的同学火速预定吧!

  • 品牌吉祥物ip设计案例(吉祥物在品牌设计和营销的运用)

    每一届奥运会,东道主国家都会根据当地的文化来设计吉祥物。△2020年的东京奥运会吉祥物吉祥物在营销上有着巨大的力量,而在网页设计上,同样是如此。强化沟通Mascot是用户和产品之间沟通的桥梁。吉祥物则是触发情感的重要途径之一。另外一个案例,是Tubik团队给Whizzly所设计的LOGO吉祥物形象。

  • 雄鹿队是哪个城市的 nba雄鹿是哪个城市

    密尔沃基雄鹿队是一支属于美国的威斯康星州密尔沃基为基地的NBA职业篮球队,成立于1968年,并同年加入NBA联盟,是美国男篮职业联赛东部联盟中部赛区的一部分。

  • steam改完国区后要注意什么(Steam国区社区可轻松访问)

    Steam国区的社区可以正常访问了。据SteamCN蒸汽动力,Steam客户端社区日前强制走https。“目前无论是通过浏览器还是客户端,无论是打开商店还是社区,全部已经强制https。这意味着,如果遇到访问困难的问题只需要改hosts即可”。如需要对hosts进行修改,可以去SteamCN下载hosts编辑器,其中内置了不少常用的游戏hosts。

  • 福建为什么经济发展快(福建的省会不是厦门而是福州)

    ,省会城市也基本上是本省的政治、科技、教育、文化中心,绝对的NO.1但是,也有个别省份列外,尤其是福建省,福建的省会不是厦门而是福州,但GDP第一的却是泉州,太神奇了福建省,远古属百越之闽越部落,《禹贡》属扬州,地跨闽江、晋江、九龙江、汀江四大水系,与台湾隔海相望,是中国大陆重要的出海口,也是中国与世界交往的重要窗口和基地。

  • 橘子核怎么种植 橘子核种植方法

    还要将橘子核上面的外皮给揭掉,但是一定要小心,不要伤到内部的组织,这样处理能促使更快发芽。可自己用园土,河沙土进行混合,也可购买花卉专用土,一般也能满足生长需求,土壤适宜能促使后期更好更快的萌发。按压会影响种子萌发。

  • 肩周炎放血疗法(肩周炎放血疗法图片)

    放血疗法要领1、穴位要找准(正常情况下穴位大约是指甲盖大小,也就是一平方厘米,定位不准的,请刺一平方寸大小。哪些肩周炎患者不能用放血疗法并不是所有的肩周炎患者都可以放血疗法治疗,一般来说孕妇,年老体弱,有出血倾向的肩周炎患者不要用放血疗法,另外,值得注意的是糖尿病患者也不能采取放血疗法。

  • 深圳地铁6号线区间站(深圳开通366区间啦)

    和深港在线小编一起看看。366区间线运营信息:开通意义:为提升坑梓、坪山、龙岗、布吉、罗湖主要客流通道上的市民早晚高峰出行的效率。单边减少59个站台,缩短运行时间约45分钟。早晚高峰定点发车,投入运力5台。

  • 怎么才能使自己变漂亮一点(怎么让自己越来越漂亮)

    爱情是女人的化妆品,在心仪的男人面前,女人会变得温柔可爱,柔情似水。举止投足间散发着淑女气质。外貌的吸引是暂时的,迷人魅力的气质才是永恒的。

  • 如何做带鱼好吃又简单(带鱼制作的步骤是什么)

    下面内容希望能帮助到你,我们来一起看看吧!如何做带鱼好吃又简单带鱼买回来洗干净,切成块,再放上食盐腌十分钟,再把腌好的带鱼洗干过一遍水控水备用。把带鱼块放在碗里,再打一个鸡蛋,加上蚝油,面粉,生姜末,五香粉,鸡粉,盐,搅拌均匀备用。锅烧热放稍多一点花生油,再把带鱼放进去,慢火煎,在中间要记得翻面,煎至两金黄即可。再在盘底两片生菜叶子,把带鱼块夹起来放在生菜上,这样喷香喷香的带鱼就做好了。