下面这道题目,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条评论
点击登录参与评论