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

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

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

    推荐阅读
  • 微信红包封面怎么免费领(微信红包封面免费领的方法)

    接下来我们就一起去了解一下吧!因为制作微信红包不是免费的,所以想免费使用就不能自己制作,只能去问拥有微信红包封面的人要。一般很多微信企业号会在朋友圈、公众号等进行发放自己的微信红包封面,我们免费领取即可。领取的时候大家可以在微信界面上方点击图标进入。会有领取的地方,打开可以点开试一下能不能领取,一般公众号可以领取,点击一个进入。

  • 武汉免费门票怎么预约领取 武汉免费门票怎么预约领取优惠

    「2022武汉文旅惠民券活动」活动期间,面向本地市民以及全国疫情低风险地区游客发放100万张以上武汉文化旅游惠民券(电子券),包括旅游景区及游船类100万张,文化演出9场。其中文化演出、游船以包场/船的形式参与活动,原则上每周各推出1场惠民专场。

  • 陈情表翻译(陈情表全文翻译)

    我的祖母刘氏,怜悯我年幼丧父,便亲自抚养。但祖母刘氏又早被疾病缠绕,常年卧床不起,我侍奉她吃饭喝药,从来就没有离开她。臣因为供奉赡养祖母的事无人承担,辞谢不接受任命。只是因为祖母刘氏寿命即将终了,气息微弱,生命垂危,早上不能想到晚上怎样。希望陛下能怜悯我的诚心,满足我微不足道的心愿,使祖母刘氏能够侥幸地保全她的余生。

  • 都柏林机场介绍(场地规模怎样)

    目前,都柏林机场拥有两座航站楼。现今,1号航站楼为所有短途航班服务。该航站楼主要为主流的航空公司如美国航空、美国达美航空、阿联酋航空、阿提哈德航空、美国联合航空、全美航空和爱尔兰航空服务。都柏林机场主营国内、地区和国际定期的客货运航线,为超过30家的航空公司服务,年客运吞吐量达到约3500万人次。都柏林机场是爱尔兰航空、西捷航空、英国君主航空、瑞安航空、汤姆森航空和爱尔兰阿伦航空的枢纽基地。

  • 铠之巨人是谁(铠之巨人的介绍)

    铠之巨人是谁铠之巨人,是日本漫画家谏山创的作品《进击的巨人》中的角色。全身覆盖超硬的铠甲,连调查兵团的刀都会被崩断,雷枪能勉强破坏其铠甲,大陆科技能完克其铠甲。关节等不显眼的小部位不覆盖铠甲,攻击和防御都非常出色,但不灵活。《进击的巨人》里出场频率很高的巨人,战绩仅几胜,因力量和防御都极强但经常败北也被称为马莱纸盾,又因撞破城门被称为对门宝具、门之巨人、颚巨克星,马莱纸盾。

  • 个人开公司的费用(个人开公司流程)

    租房后要签订租房合同,并让房东提供房产证的复印件。章程的最后由所有股东签名。银行会发给每个股东缴款单、并在询征函上盖银行的章。填好后,连同核名通知、公司章程、房租合同、房产证复印件、验资报告一起交给工商局。此项费用约300元左右。费用是各40元,共80元。办理税务登记证时,必须有一个会计,因为税务局要求提交的资料其中有一项是会计资格证和身份证。

  • 乌龟会无缘无故咬人吗(乌龟咬人怎么办)

    放水里被乌龟咬住后,要赶快把它放到水里,让水淹没龟壳,在它松开口的时候加快抽出手也可以。敲龟壳不小心被乌龟咬住后,你可以先把它放地上,然后用东西敲它的龟壳,这样原本胆小的它定会松口逃跑。等着它松口一般乌龟咬人伤害并不大,所以只要是咬住受得住的,可以等它自己松口,不过不要强行拉出,不然会越咬越紧的。

  • 丝瓜花雄蕊和雌蕊的区别(丝瓜花雄蕊和雌蕊的区别有哪些)

    丝瓜花雄蕊和雌蕊的区别?以下内容希望对你有帮助!丝瓜花雄蕊和雌蕊的区别丝瓜花雌雄同株,雌花雌蕊一个,雄花雄蕊一个,都是合冠盆状花冠,花萼五瓣五出深裂,有脉纹。花蕊同株花后结实为瓠果细长夏季叶腋开单性花,雌雄同株,雄花为总状花序,先开,雌花单生,有长柄,花冠浅黄色。

  • 甘孜州旅游攻略(有什么好玩的地方)

    甘孜州旅游攻略丹巴,位于丹巴县城西南21公里的东谷乡境内。丹巴藏寨丹巴藏寨与碉楼在建筑风格上一脉相承,是嘉绒山寨中最具特色的。贡嘎山,贡嘎山坐落在青藏高原东部边缘,位于四川省康定、泸定两县分界处,是横断山脉大雪山的主峰,海拔7556米,东经141.8度,北纬29.6度,是四川省第一高峰,被誉为“山中之王”。特别是大冰瀑布,高达1000多米,瑰丽非凡。

  • 林保怡拍戏花絮(还记得TVB演员林保怡吗)

    后宫剧鼻祖,《金枝欲孽》,他是备受各位后妃钟爱的太医孙白杨。已经56岁了,还未婚。身份从演员拓宽至监制,去年挺火的《叹息桥》便出自他手。有狗狗阿水的陪伴,生活充满乐趣。#突然来了精神,是因为听到了国歌不过,今年5月份阿水去世了。阿水去世后,一向把它视为家人的林保怡告诫自己:学习控制自己情绪,做好自己。去年底,因《叹息桥》获华鼎奖后,一直处于休息状态,学弹吉他,享受生活。