Java的string初始化为null,为什么把null当成了字符串?而不是空?

String a = null;
System.out.println(a+"1");
输出为null1

阅读 9.5k
6 个回答

a+"1"等同于String.valueOf(a)+"1",不只是String,当a为Integer和Double时都如此。

public static String valueOf(Object obj) {  
  return (obj == null) ? "null" : obj.toString();  
}  

当String对象为空时返回字符串null,这下知道为什么了吧。

java源码对null处理了,你打印null,他就输出null了

@depress 说的很好,补充下为什么会调用String.valueOf,其实“+”这个运算符可以看做是一个语法糖,对于C++开发者来说可能会觉得是操作符重载了,其实在java中是没有重载的,通过反编译.class文件可以看到其会调用java.lang.StringBuilder#append(java.lang.Object)这个方法,所以就会产生depress所说的那种情形。

jdk 源码 :

/**
     * Prints a string.  If the argument is <code>null</code> then the string
     * <code>"null"</code> is printed.  Otherwise, the string's characters are
     * converted into bytes according to the platform's default character
     * encoding, and these bytes are written in exactly the manner of the
     * <code>{@link #write(int)}</code> method.
     *
     * @param      s   The <code>String</code> to be printed
     */
    public void print(String s) {
        if (s == null) {
            s = "null";
        }
        write(s);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进