之前做了思科大数据开发工程师的笔试题,其中有一道题目是判断一段Java代码的输出结果,最后实质上是判断System.out.println()括号中如果传入null会输出什么。在回顾当时的题目时,找到一个国外大学的教师写的博客讲得很详细:
https://yourbasic.org/print-null-java/
主要的意思就是,System.out.println()括号中如果传入null,不同形式的null最终的输出也不同。如果是直接传入null:
System.out.println(null);
会在编译时报错,即无法确定传入的值是属于字符数组对象还是String对象,错误信息如下:
reference to println is ambiguous, both method println(char[]) in java.io.PrintStream and method println(java.lang.String) in java.io.PrintStream match
也就是说,System.out.println()在输出结果的时候括号内的参数有两种,char[]和String(或Object)。一般必须显式指定传入的值所属的对象类别。如果传入Object或String对象:
Object o = null; String s = null; System.out.println(o); System.out.println(s);
输出如下所示:
null null
所以如果传入的null值是Object或者String对象的形式,最终的输出就是null。但如果传入的是字符数组char[]:
-
char[] a = null;
-
System.out.println(a);
最终会抛出空指针异常,如下所示:
Exception in thread "main" java.lang.NullPointerException at java.io.Writer.write(Writer.java:127) at java.io.PrintStream.write(PrintStream.java:470) at java.io.PrintStream.print(PrintStream.java:620) at java.io.PrintStream.println(PrintStream.java:759) ...
因为数组的引用指向null,所以访问该字符数组对象时就会找不到实际的char[]实例,就不会有正常输出。
原文链接:https://blog.csdn.net/qq_33588730/article/details/82943770