今天和朋友在群里交流 碰见一个问题
java中 null+"a" =nulla; 很诡异的问题
网上查了查 ,一些懂得java源码的大神给了些解释;
这不是JVM的作用是Java编译器把这段重构了,反编译一下就看得出是
new java.lang.StringBuilder [16]
dup
aload_1 [str1]
invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [18]
invokespecial java.lang.StringBuilder(java.lang.String) [24]
看得出跟下面是一样的
new StringBuilder(
String.valueOf(str1)
);
而你在看String.valueOf方法是这样的
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
。因此Stringbuilder 最终构造的是一个 "null"字符串