【发布时间】:2011-05-14 17:28:15
【问题描述】:
为什么以下工作?我希望NullPointerException 被抛出。
String s = null;
s = s + "hello";
System.out.println(s); // prints "nullhello"
【问题讨论】:
-
s 的 type 在编译时是已知的,
+ operator在 String 类型上重载(例如,参见 Jonathans 的回答)。s + "hello"行中没有方法调用,因此 NPE 没有机会,因为没有对象接收器(并且“代码转换”必须遵守此合同)。编码愉快。 -
我同意你的思路yavoh。自动字符串化 null 不是 Java 的一个好部分。为 Sun 做了这么容易出错的事情而感到羞耻。
-
@user166390 很好的解释,不是吗,但打印
nullhello仍然是 IMO 的一种违反直觉、无用的行为。 -
我想很多开发者都有误解,如果我使用一个空对象,它就会崩溃。事实上,只有当你调用空对象的属性或方法时,才会崩溃。
-
如果明智的人将 null 转换为空字符串 "" 我有点理解,但转换为文字 4 字符字符串 "null"?!
标签: java string concatenation string-concatenation