关于Java 字符串的一个小问题

我在代码里面想实现一个将Object对象打印的功能,具体的代码如下:

public class JavaJsonDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Object value = null;

        String str = "value=" + value;

        System.out.print(str);

    }
}

 

这单代码是可以正常执行的。

 

但是,如果将代码改为

 

    /**
     * @param args
     */
    public static void main(String[] args) {

        Object value = null;

        @SuppressWarnings("null")
        String str = "value=" + value.toString();

        System.out.print(str);

    }

 

就会报空指针的异常。

 

我的问题是:

java字符串在进行“+”操作的时候,难道不是调用的toString方法吗?如果是,那么第一种场景为什么可以顺利的被转换为null打印?

String str = "value=" + value; 在jdk5及以上变为
StringBuilder s = new StringBuilder();
s.append("value=");
s.append(value);
str = s.toString();

append部分实现
public AbstractStringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
public AbstractStringBuilder append(String str) {
[color=red] if (str == null) str = "null";[/color]
int len = str.length();
if (len == 0) return this;
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
str.getChars(0, len, value, count);
count = newCount;
return this;
}

可以看到内部if (str == null) str = "null";


Object value = null;

String str = "value=" + value.toString();

value是null,则无法调用它的方法toString 因此空指针