String为null的奇怪问题
class TestNullString {
public static void main(String[] args) {
// --------- block 1 --------------------------------------------------
String str = null;
System.out.println(str); // output: null (1)
System.out.println(str + "Test"); // output: nullTest (2)
System.out.println(str.toString()); // java.lang.NullPointerException (3)
// --------- block 2 --------------------------------------------------
String str2 = "";
System.out.println(str2);
System.out.println(str2 + "Test");
System.out.println(str2.toString());
}
}
在上面这个简单程序的block 1当中, str是一个字符串对象,初始化为null。
1。为什么(1)可以打印出null, 而(3)却报NullPointerException? println()打印的时候不是缺省调用对象的toString()方法的吗?那(1)和(3)应该同时报错,或者同时输出null啊?
2。(2)的输出怎么会是nullTest? 感觉象字符串连接"null" + "Test" 一样,可str明明是null而不是"null"。按照我的想法,至少应该输出"Test"啊?
如果str初始化为空字符串(block 2),则一切正常。但是关于block 1的现象在书上找不到解释,请哪位大侠不吝赐教。
谢谢