1. System.out.println(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
PrintStream
中有3
个println
方法接受引用类型:
println(char x [])
println(String x)
println(Object x)
当您通过null
时,所有3
都适用。方法重载规则优先使用最具体参数类型的方法,因此不会选择println(Object x)
。而编译会在println(String x)
和println(Object x)
之间进行选择,但它们这两个函数都是具体参数类型的方法,因此编译器无法做出判断。故抛出reference to println is ambiguous
错误。
char s[]=null;
System.out.println(s);
最终会抛出空指针异常,如下所示:
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)
...
最主要的原因是在java.io.Writer.write
存在着对数组长度的获取,即c.length
。而c
本身就是一个null
,故产生了NullPointerException
。