首页 > 解决方案 > 运算符“+”不能应用于对象和字符串

问题描述

以下代码:

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 编译?这在任何地方都有记录吗?

标签: javajava-8javacjava-6

解决方案


JLS 15.26.2。复合赋值运算符指出:

形式的复合赋值表达式E1 op= E2等价于E1 = (T) ((E1) op (E2)),其中T是 的类型E1,除了E1只计算一次。

这句话从Java 6Java 14都是一样的,并且自 Java 开始以来可能从未改变过。

所以value += suffix是一样的value = (Object) (value + suffix)

Java 6 编译器不应该无法编译该语句。


推荐阅读