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

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

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

    推荐阅读
  • 连续剧终极笔记介绍(终极笔记的剧情是怎样的)

    在西王母宫中意外发现神秘陨玉,却不想此时三叔突然失踪、张起灵失忆;为帮助张起灵寻回记忆,众人一路探索,发现张家古楼正是关键所在,却因为裘德考势力的介入不得而终。至此谜团未解,各方势力失衡,吴邪被迫戴上面具伪装成三叔。该剧讲述了自云顶天宫事件之后的系列故事,吴邪从三叔处得知西沙海底的隐情,以及战国帛书与老九门的恩怨后,收到两盘张起灵寄来的录像带的故事。该剧于2020年12月10日在爱奇艺播出。

  • 怎样能快速减肚子(如何瘦肚子)

    怎样能快速减肚子饮食要控制好,对于减肥者要注意饮食的控制,多食用蔬菜少食用脂肪多、糖类含量大的食品,对于水果的食用也要搞清楚哪类水果含糖量高,多食五谷杂粮以及适量的瘦肉蛋白,防止高热量食物过多的摄入。良好的生活习惯,切记熬夜,要早睡早起,让器官内脏得到充分休息。

  • 酵母发面多长时间能发好(发面技巧有哪些)

    接下来我们就一起去了解一下吧!酵母发面多长时间能发好酵母发面20分钟左右就能发好。二次发酵对于成品的松软度有很大的作用。因为生冷的馒头突然遇到热气,容易使馒头发不起来。正确的方法应是在锅内加入冷水,然后放上馒头,再加热升温,可使馒头均匀受热。

  • 笋瓜饼如何做(有什么需要的原料)

    我们一起去了解并探讨一下这个问题吧!笋瓜饼如何做将洗净的笋瓜切成丝备用,加入少量的胡萝卜丝和大葱丝,加入盐,白胡椒,味精等调料搅拌均匀并腌制五分钟。加入两个鸡蛋在里面,加入适量的面粉,再加入适量调料拌成稀糊状。在锅中烧上一些油,将模具放入油中烧热一下,油烧至六七分热的时候将笋瓜糊倒入其中,煎至定型后,取下模具,再同样方法做下一个。将双面煎成金黄色捞出放在厨房纸巾上吸油即可。

  • 吉利汽车博越收音机怎么关闭(博越收音机怎么开)

    吉利约伯还配备了ACC智能自适应巡航系统。该系统采用博世中程雷达,最大探测距离160米,雷达开启角度达到±45度。LDW主动偏航警告系统有效降低了驾驶员疲劳或分心造成的风险。博越提供两种动力总成,2.0L自然吸气发动机配备6速手动变速箱,1.8T涡轮增压车型配备6速手动变速箱和6速自动变速箱。

  • 沉寂的大地(苏醒的大地)

    没有人会认为这种“泥土的腥气”刺鼻,只是觉得新鲜,如处子柔嫩的肌肤般的新鲜。这种“腥气”,是一种生机,是一种春天的召唤。有时,他们甚至于会站立高处,大喊一声,以抒发他们内心的欢愉。一个人,行走于阡陌间,空气润润的,湿湿的。虫儿,在泥土下钻动,在地面上爬行;一条虫儿,最是贴近泥土,也最是懂得享受泥土的味道了。春风,使大地,彻底醒来了。

  • 男的断袖(断袖和磨镜自古有之也就是现在说的男男)

    现在人们将男女同性恋统称为同性恋,但在古代男女同性恋分别有不同的称谓。男同性恋称为“断袖”,而女同性恋则叫“磨镜”。从此对他日益宠爱,同车而乘,同榻而眠。董贤不仅长得像美女,言谈举止也十足地像女人,“性柔和”、“善为媚”,让汉哀帝宠爱非常。一次午睡,董贤枕着哀帝的袖子睡着了。哀帝想起身,却又不忍惊醒董贤,随手拔剑割断了衣袖。

  • 炼猪油加水和不加水(炼猪油加水和不加水对比是什么)

    熬猪油全程温度很高,加水熬煮,水密度高会全程在底部,上层的肥肉因为水的隔热不会导致温度过高,熬猪油危险性降低,并且锅底的水也会慢慢挥发为水蒸气挥发走,全程更安全。猪油内的香味主要来自于肥肉或板油中的挥发性气体,该物质在接触高温时很容易挥发,因此不加水直接熬煮,肥肉或猪板油的受热速度太快,内部所带的香味气体会更快散去,导致熬好的猪油不香浓。

  • 流星蝴蝶剑爱情片段(最伤心的就是你爱的人一直爱着他人)

    《新流星蝴蝶剑》中叶翔爱着高老大,高老大爱着孟星魂,而孟星魂和小蝶两人相爱。孟星魂、叶翔、何菁原本是三个非常要好的小伙伴,后来高大姐加入并成为其老大,而且还创建了快活林。无奈孟星魂爱上了小蝶,从来只把她当成大姐。高大姐一直不喜欢小蝶,总是故意叫错她的名字,对于她做的点心也说不好吃。甄子丹饰演的叶翔是一个闷小伙子,时常不懂得表达自己的情感,一直不敢向高大姐说出自己内心的想法。

  • 逆水寒土豪玩家排行表(逆水寒全服第一账号长什么样)

    最近,逆水寒第一主播"浮夸"向网友展示了逆水寒花费超过1000万RMB、总评分全服第一的神级土豪的账号,网友瞬间被亮瞎眼。看起来土豪除了砸装备也是一个外观党,这大概也和逆水寒外观和画质制作精美有关系。看到这位土豪的账号大家心中堆起了一座柠檬山,而像"会心流"这样的老板在逆水寒中还有不少。