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

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语句的逻辑。

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

    推荐阅读
  • 水表冻了怎么修(水管冻上了咋办)

    冬季即将来临,为防止水表、水管冻坏而影响正常用水,济宁中山公用水务有限公司发布三种防冻便民措施。对暴露在外的水表、供水管道、水龙头等供水设施须用棉麻织物、塑料泡沫等保温材料进行包扎;室外水表井应将井盖盖好,预防水表及闸阀冻坏。公司的工作人员提醒,可以采用“温水解冻”。如发现水表表盘玻璃冻裂,请及时与济宁中山公用水务有限公司联系及时止水并更换新表,以免造成水量流失。

  • 被卡特隔扣的大个子集锦(8大最经典的隔扣瞬间)

    在一个回合中热火队前场逼抢造成特里失误,随后热火队打出了三线快攻,詹姆斯更加是接球从天而降将特里完全扣翻在地。这被评为韦德职业生涯中最出色的扣篮,甚至没有之一,即便瓦莱乔的手已经打到了韦德的脸上也无法阻止他完成这个扣篮。

  • iphone 几才有实况功能(不会用iPhone的实况功能不算真果粉)

    苹果手机的一些功能只不过是藏得比较深而已,今天小编就带大家了解一下如何用iPhone的原生相机,拍出好看的照片!

  • 挽留是什么意思(挽留词语解释)

    意思是使将要离去的人留下来挽留,汉语词汇拼音:wǎnliú,下面我们就来聊聊关于挽留是什么意思?接下来我们就一起去了解一下吧!挽留,汉语词汇。元宋旡《鲸背吟·抛矴》:“千斤铁矴系船头,万丈滩中得挽留。”《老残游记》第二回:“管事的再三挽留不住,只好当晚设酒饯行。”

  • 稻纵卷叶螟幼虫各龄虫历期(稻纵卷叶螟幼虫特征)

    稻纵卷叶螟,别称为刮青虫、白叶虫,苞叶虫等,是中国水稻产区的主要害虫之一。稻纵卷叶螟幼虫各龄虫历期介绍如下:初孵幼虫一般从叶尖沿叶脉来回爬动,啃食叶肉,留下针头形状的白色透明小点。2龄幼虫开始爬到叶尖或稻叶中上部吐丝为害。4龄幼虫进入食量增长阶段,转苞转株频繁,随虫龄越大,取食越多。5龄幼虫进入暴食阶段,其虫苞大小与4龄虫苞类似,苞内基本无虫。

  • 冬季如何设置空调省电(如何既省电又舒适)

    在燥热的夏天,算是一年中气候最热的时候,如果没有空调,就好比在烤箱中炙烤的火腿,简称"hotdog"。空调给予人类二次命运生存的机会。首先,我们得知晓,通常在夏季,人类体感最舒适的温度是18℃~24℃,冬季为17℃-22℃。所以建议夏天空调开至26~28℃更节能。此外,这个温度的范围是比较省电的。开空调制冷容易导致皮肤干燥问题1、可以加装一台加湿器。

  • 杭州端午地铁(杭州地铁运营时间有调整)

    端午将至,同时全国高考结束,家长及学生出游人数将明显增多,杭州将迎来出行高峰。杭州高速交警提醒,如遇各条高速公路出现长时间排队缓行时,及时更新导航设备,根据导航提示做出合理绕行。限行政策端午期间,杭州不实施错峰出行措施,景区单双号通行。各出城口将迎来极大的考验,通过分析以往数据可得各出城通道的拥堵时段和时长:综合考量天气、时间成本等,杭州交警建议错峰出城,避开出行高峰。

  • 望之不似人君的望的意思(左右或欲引相如去的引的意思)

    左右或欲引相如去的引的意思1、引:拉、拽。卒廷见相如,毕礼而归之。终于在朝廷上接见蔺相如,完成接见的礼节,送他回赵国去了。

  • 075583765566如何转人工(075583765566如何转人工2019)

    075583765566转人工的方法如下:1、首先在数字键盘上输入075583765566并拨打,根据语音提示选择填写自己的账号,或者选择以井号键选择本机号码;2、根据语音提示在键盘上按下3键;3、在数字键盘上输入自己的账号以井号键结束。

  • 四种吉祥花既漂亮又好养(春节将至这4种吉祥花)

    第四种,玉树最后一个就是玉树,可能跟前面的几种花草相比,玉树所表达出来的意思并没有那么的明显。但是这并不能够说它就是没有吉祥如意意思的。因为在玉树的玉字里面,其实就有这一层的意思。而且玉树作为一个配载放在家中绝对是一个正确的选择,首先不说它四季常青,只要养得好,还能够将它养成一个身价翻倍的老桩。