运算符“+”不能应用于对象和字符串
Operator '+' cannot be applied to Object and String
以下代码:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
在 JDK 8 中编译没有错误(使用 -source 1.6),但在 JDK 6 中编译失败并显示错误消息:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
虽然我明白错误是什么,但为什么用 JDK 8 编译?这在任何地方都有记录吗?
JLS 15.26.2. Compound Assignment Operators 状态:
A compound assignment expression of the form E1 op= E2
is equivalent to E1 = (T) ((E1) op (E2))
, where T
is the type of E1
, except that E1
is evaluated only once.
这句话与 Java 6 to Java 14 相同,并且自 Java 开始以来可能从未改变过。
因此 value += suffix
与 value = (Object) (value + suffix)
相同
Java6 编译器应该不会编译该语句。
以下代码:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
在 JDK 8 中编译没有错误(使用 -source 1.6),但在 JDK 6 中编译失败并显示错误消息:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
虽然我明白错误是什么,但为什么用 JDK 8 编译?这在任何地方都有记录吗?
JLS 15.26.2. Compound Assignment Operators 状态:
A compound assignment expression of the form
E1 op= E2
is equivalent toE1 = (T) ((E1) op (E2))
, whereT
is the type ofE1
, except thatE1
is evaluated only once.
这句话与 Java 6 to Java 14 相同,并且自 Java 开始以来可能从未改变过。
因此 value += suffix
与 value = (Object) (value + suffix)
Java6 编译器应该不会编译该语句。