Java + =运算符

问题描述

据我了解,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;

nulltrue被隐式转换为String。之所以可行,是因为在str + null中,编译器知道strString并将null转换为String。这是可能的,因为在Java中每个值都可以转换为String。通过相同的论点,编译器知道(str + null)String,因此将true隐蔽到String

另一方面,

str += null + boolean;

等同于

str = str + (null + boolean);

因此,null + boolean首先被评估。由于未为类型+定义运算符null,boolean,因此会生成编译器错误。