System.out.println()中传入null会发生什么

之前做了思科大数据开发工程师的笔试题,其中有一道题目是判断一段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[]实例,就不会有正常输出。

猜你喜欢

转载自blog.csdn.net/qq_33588730/article/details/82943770
今日推荐