【发布时间】:2011-09-07 05:03:34
【问题描述】:
在执行以下行时:
System.out.println(null);
结果出来是null打印在控制台上。
为什么会这样?
【问题讨论】:
-
-1 - 这个问题可以通过阅读 javadoc 来回答。
在执行以下行时:
System.out.println(null);
结果出来是null打印在控制台上。
为什么会这样?
【问题讨论】:
从 OpenJDK 1.6.0_22 的源码来看:
打印流:
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();
}
【讨论】:
实际上,至少在 java 版本 1.8.0 中,System.out.println(null); 不应该打印null。您会收到如下错误消息:
对 println 的引用不明确,PrintStream 中的 println(char[]) 方法和 PrintStream 中的 println(String) 方法都匹配。
您必须按以下方式进行转换:System.out.println((String)null); 请参阅 coderanch 帖子 here。
我想你也可以通过System.out.println(null+""); 来完成同样的工作。
【讨论】:
因为这正是 Javadocs 所说的那样?
http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html#print(java.lang.String)
打印一个字符串。如果参数为空,则打印字符串“null”。
【讨论】:
它最终会调用String.valueOf(Object),它看起来像:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
【讨论】:
当我查看 PrintStream 的 javadoc 时,我观察到(我在这里引用)
打印
public void print(String s)
打印一个字符串。如果参数为空,则字符串“null”为 打印。否则,字符串的字符将转换为字节 根据平台的默认字符编码,而这些 字节完全按照 write(int) 方法的方式写入。 参数:s - 要打印的字符串
希望这能回答你的问题..
【讨论】: