牛叔叔 的笔记

好好学习

2023-07-09 10:17

一道Java面試題

牛叔叔

JavaEE

(236)

(0)

收藏

下面这道题目,if中填写什么能让这个程序打印的结果是"ab"

public static void main(String[] args) {
    if (?) {
        System.out.print("a");
    } else {
        System.out.print("b");
    }
}

这道初步看,无论if中填写什么,都不可能最后打印ab。

可是,看看下面的代码:

public static void main(String[] args) {
    if (args == null || new Test() {
        {
            Test.main(null);
        }
    } == null) {
        System.out.print("a");
    } else {
        System.out.print("b");
    }
}

运行之后,打印的还真是ab

颠覆了传统认知了


这段代码的重点是在if中再一次调用了这段 main函数代码,所以当程序执行的main 函数时,默认args并不是null,而是一个空的数组对象,所以,这时候if条件中会执行||之后的关系计算,该计算表达式中使用了匿名内部类继承Test,而这个内部类中增加了代码块,代码块中调用了main函数,并传递了null给String[] args,在这个调用中,执行了main函数代码,因为args==null成立,所以就打印了'a',进而当new Test()执行完毕,也就是打印'a'完毕后,new Test()==null判断结果肯定是false,进而使得程序打印'b',最后结果为'ab'。


你还有别的方法吗?

0条评论

点击登录参与评论