问题描述
据我了解,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中,expression are evaluated from left to right。因此
str = str + null + true;
与
相同str = (str + null) + true;
,null
和true
被隐式转换为String
。之所以可行,是因为在str + null
中,编译器知道str
是String
并将null
转换为String
。这是可能的,因为在Java中每个值都可以转换为String
。通过相同的论点,编译器知道(str + null)
是String
,因此将true
隐蔽到String
。
另一方面,
str += null + boolean;
等同于
str = str + (null + boolean);
因此,null + boolean
首先被评估。由于未为类型+
定义运算符null,boolean
,因此会生成编译器错误。