美文网首页JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统
Java面试官灵魂拷问:if语句执行完else语句真的不会再执行

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行

作者: adminmane | 来源:发表于2020-06-13 15:28 被阅读0次

写在前面

最近跳槽找工作的朋友确实不少,遇到的面试题也是千奇百怪,这不,一名读者面试时,被面试官问到了一个直击灵魂的问题:if 语句执行完else语句真的不会再执行吗?这个奇葩的问题把这名读者问倒了!

问题分析

最近一名读者留言说,自己出去面试被面试官的一道奇葩问题问倒了,这个问题就是:if语句执行完else语句真的不会再执行吗?这名读者确实不知道该如何回答这个问题。回去后,自己查阅了很多资料也没弄明白这个问题!

想必很多读者朋友遇到这种奇葩面试题时,多多少少都会觉得闹心吧!不过,闹心归闹心,问题还是要解决的。今天,我们就一起来剖析下这个奇葩的面试题。

从计算机底层原理来说,Java语句中的 if 指令和 else 指令分属于两个不同的逻辑分支,在同一段代码中,只要执行了if语句就不会执行else语句。所以,这个面试题的考点并不是让你从计算机底层原理的角度去分析问题。既然不能从计算机底层原理去分析问题,那我们需要从哪里入手分析呢?

没错,当然是从我们写的程序入手了!那么,问题来了,我们自己写的程序貌似也没有出现过执行完if语句后再执行else语句的情况呀!!别急,咱们继续往下看。

实现程序

我们先来看一段代码,如下所示。

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

在你的IDE中运行下这段程序,没错,输出结果如下所示。

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗? Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

我去,竟然真的同时执行了if语句和else语句,这是怎么回事呢?

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

代码分析

我们来看这段代码反编译后的结果,如下所示。

public class Test {    public Test() {    }    public static void main(String[] args) {        (new Test()).print(args == null || (new Test() {            {                Test.main((String[])null);            }        }).equals((Object)null));    }    public void print(boolean flag) {        if (flag) {            System.out.println("我是if语句的分支");        } else {            System.out.println("我是else语句的分支");        }    }}

看到这里,有木有一种恍然大悟的感觉呢?没错,上述的程序在本质上,main方法执行了两次。为什么会是执行了两次呢?原因就在main方法中调用print()方法时,传递的参数上。所以,我们先来看看调用print()方法传递的参数,如下所示。

args == null || (new Test() {    {        Test.main((String[])null);    }}).equals((Object)null)

可以看到,调用print()方法传递的参数中,args == null为true,执行print()方法的if语句,这点不难理解。接下来就是要重点理解下面的代码片段了。

(new Test() {    {        Test.main((String[])null);    }}).equals((Object)null)

这段代码是什么意思呢?首先,这段代码再次创建了一个Test类的对象实例,并在代码块中调用了Test类的main()方法,此时,由于Test类的对象实例不为空,所以,equals((Object)null)会返回false。此时,再次执行print()方法时,传递的flag为false,执行了else语句的逻辑。

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

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

写在最后

最后,附上并发编程需要掌握的核心技能知识图,祝大家在学习并发编程时,少走弯路。

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

还一套技术资料不仅能精准消除技术盲点、累计面试经验,更可以攻克JVM、Spring、分布式、微服务等技术难题。

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

海量电子书,珍藏版

Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗? Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗? Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗? Java面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

1、加微信获取


1892324-20200408173704995-149739833.png

相关文章

  • Java面试官灵魂拷问:if语句执行完else语句真的不会再执行

    写在前面 最近跳槽找工作的朋友确实不少,遇到的面试题也是千奇百怪,这不,一名读者面试时,被面试官问到了一个直击灵魂...

  • day-04

    if 语句 (2) if--elseif 条件语句;代码1else:代码n其他语句执行过程:满足1,执行1,再执行...

  • Python 条件语句

    1 if语句 2 if-else 执行过程:先判断条件语句是否为True,如果为True就执行代码块1,执行完代...

  • python基础期中考试考点

    1.try:的语句出现异常才会执行except后的语句,如果正常,则执行完try后执行else。另外,finall...

  • python循环判断

    1、if 判断语句 if 判断条件1: 执行语句1elif 判断条件2: 执行语句2else: 执行语句 3 ...

  • python笔记-(语句、函数)

    所有判定语句后有:,执行语句后无: 一. if语句 1.基本形式 if判断条件: 执行语句…… else: 执行语...

  • 第四课 JavaScript if语句

    JavaScript if语句 if(判断条件){ //执行体 满足条件则执行这里 } If else 语句 ...

  • 判断语句、循环语句

    1.if条件判断语句语法:if 条件:执行语句elif 条件:执行语句...else:执行语句 猜字游戏从键盘输入...

  • 一行代码实现if else

    if 条件:直接跟执行语句的话就不能跟else以及后面的执行语句 这样可以实现一行能只能else后面的语句: 执行...

  • per-course条件分支

    if语句 条件成立,执行if语句条件不成立,跳过if语句 if-else语句 当条件成立时,执行if后的语句当条件...

网友评论

    本文标题:Java面试官灵魂拷问:if语句执行完else语句真的不会再执行

    本文链接:https://www.haomeiwen.com/subject/myzatktx.html