据我所知,x+=1和x=x+1一样有效,但为什么它在String中不起作用?
String str = "";
str = str + null + true; // fine
str += null + true; // Error message: The operator + is undefined for the argument type(s) null, boolean
在Java中,表达式是从左到右计算的。因此
str = str + null + true;
与相同
str = (str + null) + true;
并且null
和true
被隐式地转换为String
s。这是因为在str + null
中,编译器知道str
是String
,并且将null
转换成String
。这是可能的,因为在Java中,每个值都可以转换为String
。通过同样的论证,编译器知道(str + null)
是String
,因此将true
转换为String
。
另一方面,
str += null + boolean;
相当于
str = str + (null + boolean);
因此首先评估null + boolean
。由于没有为类型null, boolean
定义运算符+
,因此会生成编译器错误。