问题描述
我在代码里面想实现一个将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) {if (str == null) str = "null"; 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 因此空指针