java - 运算符 '+' 不能应用于对象和字符串

标签 java java-8 javac java-6

以下代码:

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一样至 Java 14 ,并且自 Java 开始以来可能从未改变过。

所以value += suffixvalue = (Object) (value + suffix) 相同

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

关于java - 运算符 '+' 不能应用于对象和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232244/

相关文章:

java - 在同一端口下部署多个应用程序

java - Swing-从多行中识别一行

java - 如何获取lucene index中每个term的postings列表

java - Java 流是否能够从 map /过滤器条件中懒惰地减少?

java - 在 WSL 上安装 tomcat 9

java - 有关编译时和运行时依赖性及其解决方案的问题吗?

java - 正在运行的处理器会发出重复类警告

java - Maven 无法使用 OpenJDK 11 找到 jaxb-api,即使它存在于存储库中

Java 8 - 匿名类和 lambda 函数之间明显的不一致

java - Maven:javac:源版本 1.6 需要目标版本 1.6