Java += 运算符

Ado*_*ali 1 java operator-keyword

据我了解 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 
Run Code Online (Sandbox Code Playgroud)

Tur*_*g85 5

在 Java 中,表达式是从左到右计算的。因此

str = str + null + true;
Run Code Online (Sandbox Code Playgroud)

是相同的

str = (str + null) + true;
Run Code Online (Sandbox Code Playgroud)

and 和nullandtrue被隐式转换为Strings。这是有效的,因为 in str + null,编译器知道这str是 aString并转换null为 a String。这是可能的,因为String在 Java 中每个值都可以转换为 a 。通过同样的论证,编译器知道这(str + null)是 aString并因此转换true为 a String

另一方面,

str += null + boolean;
Run Code Online (Sandbox Code Playgroud)

相当于

str = str + (null + boolean);
Run Code Online (Sandbox Code Playgroud)

因此,null + boolean首先评估。由于+没有为 types 定义运算符null, boolean,因此会生成编译器错误。