欢迎访问欧博亚洲(Allbet Game)!

首页科技正文

欧博手机版:【Java】面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

admin2020-05-2419

写在前面

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

问题剖析

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

想必许多读者同伙遇到这种奇葩面试题时,多多少少都市以为闹心吧!不外,闹心归闹心,问题照样要解决的。今天,我们就一起来剖析下这个奇葩的面试题。

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

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

实现程序

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

public class Test {

    public static void main(String[] args) {
        new Test().print(args==null || new Test() {{Test.main(null);}}.equals(null));
    }

    public void print(boolean flag){
        if(flag){
            System.out.println("我是if语句的分支");
        }else{
            System.out.println("我是else语句的分支");
        }
    }
}

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

我是if语句的分支
我是else语句的分支

我去,竟然真的同时执行了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语句真的不会再执行吗? 第1张

,

欧博Allbet

www.jytjgs.com欢迎进入欧博平台(Allbet Gaming),欧博平台开放欧博(Allbet)开户、欧博(Allbet)代理开户、欧博(Allbet)电脑客户端、欧博(Allbet)APP下载等业务。

|

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源:欧博亚洲(Allbet Game)!

本文链接:http://www.czshenhaifb.com/post/1162.html

网友评论