if…else…同时执行
这里是引用看见这个题,____处该填什么呢?(如何才能同时执行if…else…?)填空,使得程序的运行结果是:helloworld
if (____) {
System.out.print("hello");
} else {
System.out.print("world");
}
答:首先说明,if…else…是不可能同时执行的,这应该是选择结构第一堂课上老师必然会讲的内容。此题属于脑筋急转弯,考察的是一种创新能力。
答这个题之前,先想想以下这行语句的输出结果是什么?
System.out.println(System.out.printf("hello"));
结果是:hellojava.io.PrintStream@12a3a380
因为输出语句最终调用的printf(“字符串”),实际是在java.io.PrintStream中的printf(“字符串”)方法,源码如下:
public class PrintStream extends FilterOutputStream
implements Appendable, Closeable
{
public PrintStream printf(String format, Object ... args) {
return format(format, args);
}
...
}
可见,printf()参数是字符串时,返回时是一个PrintStream对象。如果继续跟踪formar()方法,可以发现最终会返回一个不为null的PrintStream对象。因此答案来了,可以填入的值是:
System.out.printf("hello") == null
完整代码如下所示:
public static void main(String[] args) {
if (System.out.printf("hello") == null) {
System.out.print("hello");
} else {
System.out.print("world");
}
}
if在判断的过程中已经输出了hello,但判断结果为false,因此又会输出else中的world,所以答案就是helloworld。
实际上,以上的分析都不重要。重要的是,是怎么想到在if中再嵌套一条完整语句的,这个思路是怎么产生的?因为联想到了IO流中一条非常常见的代码,如下。
while((len = in.read(buf)) != -1) {
...
}
...
本文内容摘抄自:知乎 原创 颜群 大数据和人工智能技术 2019-12-06
由于本文在知乎里面看到的,标注转载提示地址有误,特在此注明地址链接供点击跳转