java - 运算符“+”不能应用于对象和字符串
问题描述
以下代码:
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。复合赋值运算符指出:
形式的复合赋值表达式
E1 op= E2
等价于E1 = (T) ((E1) op (E2))
,其中T
是 的类型E1
,除了E1
只计算一次。
这句话从Java 6到Java 14都是一样的,并且自 Java 开始以来可能从未改变过。
所以value += suffix
是一样的value = (Object) (value + suffix)
Java 6 编译器不应该无法编译该语句。
推荐阅读
- python - 结果打印列表中的项目数量
- python - 无法通过 rdp/vps 将 aiohttp 服务器部署到 Web
- css - 如何将scss变量设置为css变量使用javascript
- javascript - 我试图从标签中获取随机变化,但它不起作用
- python - 如何在 .NET 中编写使用带有 ironpython 的 python 库?
- class - Kotlin如何从父类强制执行子类
- html - 如何制作一张侧面有时间线的表格?
- javascript - 尝试使用 JavaScript 获取 CSV 数据时无休止的承诺循环
- c# - 使用 EF Core 检索每个组中的最后一条记录
- ansible - ios_logging_global 是幂等的吗?