在写代码时,突然好奇当一个对象为空时,打印输出为何是null,便作此小记。
public static void main(String[] args) {
String a = null;
String b = "null";
Object c = null;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
我们现在有a\b\c三个对象,以上代码的输出如下,均为null。
null
null
null
为了了解为何打印为null,需要查看println()方法的源码
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
public void print(String s) {
write(String.valueOf(s));
}
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
可以看到println()方法实际上调用了两个方法。而print方法调用了String.valueOf(s)这个静态方法,该方法在将对象转换为String时,会判断对象是否为空(即为null),若对象为空,则直接返回字符串"null"。