在执行以下代码行时:
System.out.println(null);
结果显示在控制台上打印null。
为什么会这样呢?
根据来源于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();
}
System.out.println(null)
不应该打印null
。你会得到一个错误,说像这样:reference to println is ambiguous, both method println(char[]) in PrintStream and method println(String) in PrintStream match。你需要进行如下强制转换:System.out.println((String)null)
。参见coderanch帖子here。我想你也可以使用System.out.println(null+"")
来实现相同的效果。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();
}
希望这能回答您的问题..public void print(String s)
打印一个字符串。如果参数为null,则打印字符串“null”。否则,根据平台的默认字符编码将字符串的字符转换为字节,并以与write(int)方法完全相同的方式写入这些字节。参数:s - 要打印的字符串