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

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

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

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

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

    推荐阅读
  • 不同凡响春节祝福语(不俗的春节祝福语)

    不同凡响春节祝福语?不同凡响春节祝福语过去的一年,你付出了勤奋努力,收获了成功喜悦,在人生的道路上留下了辉煌的一笔;崭新的一年里,愿你付出拼搏进取,在人生的旅途中画下灿烂的一笔;新的一年里,加油!一经发现,本人将强行不间断地对你送上祝福,直到该祝福完全实现为止。

  • 湖南南岳旅游区(湖南南岳旅游收入翻了三千倍)

    高铁经过南岳区南岳镇荆田村。南岳区位于湖南省中部偏东南,地处湘江之西北的湘中丘陵山区。南岳区于1984年5月以旅游建区,境内的南岳衡山为中华五岳之一,也是首批国家重点风景名胜区、首批国家5A级旅游景区、首批国家全域旅游示范区、国家级自然保护区。数据显示,2019年南岳区累计接待游客1316.37万人次,同比增长13.07%;实现旅游总收入113.52亿元,同比增长13.05%。

  • 小米平板2能玩王者荣耀吗(消息称小米正调研新平板尺寸)

    IT之家7月14日消息,此前小米推出了小米平板5/Pro,算是重新拾起了平板电脑产品线。对于小米来说,可能也将扩展平板电脑的尺寸形态。此前爆料称,小米平板6至少有两个版本,入门款采用2.5K分辨率120Hz显示屏,搭载骁龙870处理器,高配版则搭载骁龙888处理器,支持最高67W快充。小米平板6系列会采用新的大屏、新的模具和新的设计。小米平板6已通过EEC认证,这款设备的型号为22081283G,即“L83”,从设备型号来看有望在今年8月左右发布。

  • 非均质集合体是什么意思(非均质集合体的意思)

    非均质集合体是什么意思非均质集合体,一般指玉石/翡翠的检测结果。翡翠是硬玉矿物组成的非均质集合体,一般的翡翠鉴定书上大多都这么写,组成翡翠结晶的大小不一,所以叫非均质集合体。镜下观察到的普通翡翠为变斑晶纤维交织结构,斑晶是较大的硬玉,纤维状的为较小较均匀的硬玉,老种的翡翠由于一般结晶较为均匀,有些地方写的是纤维交织结构。

  • 浙江江山交通事故死亡人数增至11人(浙江发生车祸)

    时代新闻昨日上午10:00,江山召开“1028”交通事故新闻发布会,确认江山市四都镇伍嘉陵村路交通事故死亡人数已升至11人。车辆所属的江山市公共交通有限公司称,涉案车辆为东风客车厂生产、公司于2001年7月购买的6米车、19座小型客车。发布会上,江山市常务副市长王水良表示,事发后,当地300多人投入搜救。江山市将开展拉网式安全生产大检查,全面排查临水临崖、高落差隐患路段,严禁超范围营运及不通客车道路营运客运车辆。

  • 汽车托运的收费和哪些因素有关(托运费用的差异性)

    运送卡车的质量一直都是轿运公司最在乎的,因为他们知道只有良好质量的卡车才可以给他们公司带来良好的口碑,也可以给客户带来全方位的满意。

  • 建议不要选择齐刘海反而会更加美(为什么有人越剪越)

    尤其是近年来空气刘海的盛行,让它在刘海界热度稳霸第一,但是这类流行款式的刘海也是很考验人,像颜值担当的迪丽热巴,明明拥有立体标志的五官,但是换上了空气刘海却是显得五官平齐没有特别突出,而且整体还略显老态感,像欧阳娜娜的直发配上这样轻薄的空气刘海,驾驭起来确实满满的元气少女的灵动感。

  • 锦衣之下啥时候更新(锦衣之下的剧情简介)

    《锦衣之下》于2019年12月28日在芒果TV、爱奇艺联合播出,每周六至周一20:00更新2集,会员始终多看6集。该剧根据蓝色狮的同名小说改编,讲述了奸臣当道的明朝嘉靖末年,锦衣卫陆绎奉命调查扬州修河款失踪案,得到六扇门女捕快袁今夏协助,二人就此结为甜蜜冤家,却意外卷入重重阴谋的故事。朝廷十万两修河款不翼而飞,今夏奉命协助陆绎一起下扬州查案,替朝廷找回丢失的官银。

  • 三星S23通过FCC认证:3900mAh电池

    前段时间有媒体曝光了三星旗舰新款手机GalaxyS23系列的部分信息,今天该系列手机通过了FCC认证,部分细节随之浮出水面。此次曝光的机型共有两款,分别是代号为SM-S911B的GalaxyS23和代号为SM-S916B的GalaxyS23+,其中GalaxyS23电池容量为3785mAh,也就是额定容量3900mAh,GalaxyS23+的电池容量为4565mAh,也就是额定容量4700mAh,两款手机均支持25W快充。

  • 手机文件夹在哪里打开(你学会了吗)

    接下来我们就一起去了解一下吧!手机文件夹在哪里打开智能手机的文件管理器,一般都在应用程序里。所有安装手机,都有一个应用管理组,所有的应用程序安装后,都可以在这里找到。自带的文件管理器,一般都叫文件或文件管理器。有些手机,桌面有文件管理工具,可以直接看到的。