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

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

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

    推荐阅读
  • 最新通报5人被查(27人被处分......)

    ·山西公开曝光5起违反中央八项规定精神问题。

  • 中级会计解题技巧(中级会计考前103条公式)

    初级已经变成会计入门证书了,如果你想升职加薪,那么中级证书就比不可少!搞定中级会计考试就相当于搞定了大半中级,以下是中级会计考试常用的103个公式,送给各位备考的同学,背会了轻松提60分。

  • 茶店年度规划(茶店子将大变新茶小)

    听研究地名史志的老学究说,以茶取名的地方比较普遍,但是在全国城市地名中叫茶店子的很少,要说最响亮的一定是金牛区茶店子,《成都县志》载:“清同治十二年成都有地名茶店子。”至今已有一百四十余年。

  • 努力的网名(努力的网名有哪些)

    别放下出来混的挨打要立正,下面我们就来聊聊关于努力的网名?接下来我们就一起去了解一下吧!努力的网名别放下出来混的挨打要立正努力拼凑我的梦奋发↗向上追着梦想跑路还长天会亮最初的梦想奋斗吧!少年跑赢你自我!改冩人生醒自我的不是闹钟是梦想人不死终究会出头别在吃苦的年纪选择安逸别低头,皇冠会掉┣勵志的胖子⌒◣倔強的夢想◢努力总会发光有一种微笑叫坚强别让梦想只是梦想奋斗de青春

  • 宝宝辅食黄鱼怎么做(宝宝辅食黄鱼如何做)

    宝宝辅食黄鱼怎么做小黄鱼1条、姜小量、葱小量、米糊5勺。从冷藏室取出小黄鱼用薄膜袋套起来,凉水解除冻结40分钟上下。再用净水解除冻结10分钟。净水解除冻结更快,可是一般能冲30分钟,太消耗水了。将解除冻结变软的鱼取下,去鱼鳞。去内脏器官,清理干净。将姜片、葱滚刀块切条预留。将沸水倒进生姜沫,侵泡,将生姜水再倒进鱼段,腌10分钟除腥。将煮熟的鱼类挑出,放进色调深的碗里挑毛病。随后就可以吃啦。

  • 百利甜酒开了可以放多长时间(百利甜酒开了可以存放的时间)

    百利甜酒开了可以放多长时间百利甜开封后能放多久关键看你保存方法。如果保存得当的话,百利甜存放半年是没有问题的,只不过酒精多少会挥发一点,所以建议在最短的时间内喝完。百利甜的保质期通常在2年,如果温度是0~25度之间,那么即便已经开封,也能保存一年左右。由于百利甜是用奶油和威士忌为主要原料制作的,如果在未开封的情况下存放时间过长,那么瓶口就会出现奶酪状凝结物。

  • 氙字怎么读(氙字的音节)

    氙拼音:[xiān]化学符号Xe,原子序数54,是一种稀有气体,元素周期表中第18族元素之一无色、无臭、无味,化学性质极不活泼存在于空气中,也存在于温泉的气体中从液态空气中与氪一起被分离得到,接下来我们就来聊聊关于氙字怎么读?化学符号Xe,原子序数54,是一种稀有气体,元素周期表中第18族元素之一。此外,氙还用于深度麻醉剂、医用紫外线、激光器、焊接、难熔金属切割、标准气、特种混合气等。

  • 2028 洛杉矶奥运会(应对全球经济变化带来的挑战)

    当日在主题为2028年洛杉矶奥运会的线上新闻发布会上,杜比表示,奥运会筹备采取新标准,要考虑如何利用不同的方式“做生意”,确保举办城市的收益。瓦塞尔曼说,洛杉矶奥组委清晰地意识到城市面临的水资源危机,并希望承担起相应责任。

  • 智能灯泡在关闭情况下用电吗(职能灯泡关闭下为什么用电)

    跟着小编一起来看一看吧!智能灯泡在关闭情况下用电吗ED灯泡可以成为一个梦幻般的节能器,因为与其他类型的灯相比,它们不需要太多的电力。特别是智能灯泡可以是一个很大的节省,因为如果您忘记了,或者您不在身边,您可以将它们设置为自动关闭。但是,即使没有发光,智能灯泡仍然在技术上“开启”。原因是他们必须保持与家中的Wi-Fi进行通信。这样,只要您决定远程打开灯光,他们就会立即通知您。

  • 橱柜门什么颜色好(你选对了吗)

    以白色为主的橱柜门简单素雅干净,特别的漂亮高档。对于那些喜欢洁净、安静环境的朋友来说,是一个很不错的选择,但是白色橱柜门不耐。因此在保养方面要多花点心思。感觉特别的舒适。特别热情的颜色,红色橱柜门,红色橱柜充满喜庆,也是很好的选择。很多性格强烈、大胆的人都喜欢红色橱柜,不过红色橱柜对房屋装饰要求比较高,所以厨房装修的颜色不然会显得红色橱柜很突兀。