执行以下行:
System.out.println(null);
结果是在控制台上打印 null 。
为什么会这样?
答案 0 :(得分:18)
从OpenJDK 1.6.0_22的来源讲述:
PrintStream的:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
字符串:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
答案 1 :(得分:7)
实际上,至少在java版本1.8.0中,System.out.println(null);
不应该打印null
。您会收到类似以下内容的错误:
对println的引用不明确,PrintStream中的方法println(char [])和PrintStream中的方法println(String)匹配。
您必须按如下方式进行转换:System.out.println((String)null);
请参阅coderanch post here。
我想你也可以做System.out.println(null+"");
来完成同样的工作。
答案 2 :(得分:6)
因为这正是Javadoc所说的会发生什么?
http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html#print(java.lang.String)
打印一个字符串。如果参数为null,则打印字符串“null”。
答案 3 :(得分:4)
它最终调用String.valueOf(Object)
看起来像:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
答案 4 :(得分:2)
当我查看PrintStream的javadoc时,我观察到了(我在这里引用)
打印
public void print(String s)
打印一个字符串。如果参数为null,则字符串“null”为 打印。否则,字符串的字符将转换为字节 根据平台的默认字符编码,以及这些 字节的写入方式与write(int)方法完全相同。 参数:s - 要打印的字符串
希望这应该回答你的问题..