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

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

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

没错,上述的程序在本质上,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语句的逻辑。

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

    推荐阅读
  • 香煎鱼柳如何做(香煎鱼柳做法)

    接下来我们就一起去了解一下吧!香煎鱼柳如何做主料:鱼柳120克辅料:柠檬汁适量、罗勒叶适量、黑胡椒粉适量、姜适量、盐适量。鱼柳用厨房纸抹干水分。两面擦入适量的盐。两面再擦入适量黑胡椒粉腌15分钟。罗勒叶洗干净后切碎。热锅淋油将姜爆香。放入罗勒一起爆香。放鱼放进锅里小火煎。

  • 小孩出生头发长还有黄毛(刚出生宝宝头发很黑)

    但如果父母都是属于黑发浓密的那种,那孩子被遗传的几率也可达到70%到80%。比如孕期的时候多吃以下的食物,可以帮助孩子的头发健康发育。小心孕期吃多了,会导致我们的身材走样。由此可见,我们的宝宝头发出现变化后,家长不要着急,更没有必要给孩子剃胎发。

  • 罗勒籽和奇亚籽的区别是什么(怎么区别罗勒籽和奇亚籽)

    罗勒籽和奇亚籽的区别是什么外观不同,奇亚籽是一种薄荷类植物芡欧鼠尾草的种子,原产地为墨西哥南部和危地马拉等北美洲地区,种子比较小,呈椭圆,表面光滑,颜色从米黄色到深咖啡色,表面带有小黑点,可直接食用。罗勒籽乌黑发亮,大小均匀,颗粒饱满。罗勒籽遇水冲泡,其种子外面会出现白色的粘膜物(果胶)用热水冲泡速度更快。品种不同,罗勒籽形态比较饱满,它有着黑咖啡色。

  • 王者荣耀孙悟空对局(王者脑洞所孙膑拖累全队)

    敌方水晶区,孙膑,曜,鲁班大师,西施,蒙犽奋力拆水晶。曜与鲁班大师瞬间交换了位置。西施皱眉看向孙膑,焦急:“孙膑,治疗!”孙膑双手捧着怀表,不可置信:“它,好像,响了……”在这秒钟,时机错过,星之队自家的水晶爆炸……蒙犽将武器扔下,十分不满:“孙膑你干嘛呢!就差一点我们就赢了!”西施弯腰看着孙膑:“你是不是出现幻听了?”曜拉着蒙犽的后衣领,拖着蒙犽。

  • 关于天赋异禀的句子(天赋异禀6个短语)

    最近,英大在看《天赋异禀》第二季。2018年,《天赋异禀》的第二季终于与大家见面了!在三胞胎的帮助下,洛娜诞下了一名健康女婴。而安迪也有一样的梦境,梦中劳伦还因抗拒与其并力发功而坠楼。安迪惊醒之后囿于梦境而状态不佳,瑞瓦对安迪生疑,埃斯梅再提异议。在瑞瓦暗动杀机之际,安迪坦承凯特曾一直在游戏私信上劝其归队,并提到梦境。Helapsedintoacomaanddiedfourdayslater.他陷入昏迷状态,于4天后去世。

  • 电子商务专业介绍(电子商务专业介绍说明)

    下面更多详细答案一起来看看吧!电子商务专业介绍电子商务是2000年教育部批准设置的普通高等学校本科专业,属于电子商务类专业,基本修业年限为四年,授予管理学或经济学或工学学士学位,是以互联网等信息技术为依托、面向现代经济社会领域商务活动的新兴专业。经管类方向要求侧重掌握互联网经济和商务管理相关的知识与技能,工程类方向要求侧重掌握互联网技术和商务信息相关知识与技能。

  • 垃圾分类口诀(垃圾分类口诀是什么)

    下面更多详细答案一起来看看吧!垃圾分类口诀垃圾分类口诀是:干湿要分开,能卖拿去卖,有害单独放。绿厨厨,灰其其,红危危,蓝宝宝。可回收,丢蓝色,有害垃圾丢红色。厨余垃圾是绿色,其它垃圾用灰色。垃圾多,危害大,分类摆放人人夸。餐厨垃圾单独放,有害垃圾,别乱抛。乱丢垃圾危害大,干干净净利大家。垃圾分类省力气,建设城市我当先。

  • 为什么甲骨文又叫殷墟文(甲骨文上的辉煌)

    其死后,收藏的甲骨大部分为好友刘鹗所购,并于1903年出版了《铁云藏龟》,首次将甲骨文研究资料公布于世。。而古董商们为垄断货源,从中渔利,故意隐瞒甲骨出土地点,刘鹗等派人到河南多方打探,皆以为甲骨来自河南汤阴。

  • 成都特产食品有哪些可带走的(成都特产食品有什么可带走的)

    它是四川家喻户晓的佐餐小菜,其均是用当地自产的蔬菜泡渍发酵而成,营养丰富,热量低,是一款老少皆宜的小菜。蒲江米花糖蒲江米花糖所四川有名的特色小吃,也是蜀乡老字号之一,距今已有200多年的制作历史。蒲江米花糖采用是糯米、花生、芝麻等原料制成,吃起来清香可口,尤其受小朋友们的喜爱。郫县豆瓣川菜之所以能位列中国的八大菜系之首,这与郫县豆瓣是分不开的。在当地,竹叶青茶也是馈赠亲友的首选礼物。

  • 2023年度廊坊城乡居民医保缴费app下载入口

    2023年度廊坊城乡居民医保缴费app下载入口1、“河北人社”APP2、“冀时办”手机APP3、云闪付APP4、“河北税务”APP廊坊城乡居民医保参保范围:凡不属于城镇职工基本医疗保险参保范围的城乡居民,应参加居民医保。农民工和灵活就业人员依法参加城镇职工基本医疗保险,确有困难的可按照统筹地区规定参加居民医保;居民不得同时参加城镇职工基本医疗保险和城乡居民基本医疗保险,不得重复享受医疗保险待遇。