【发布时间】:2020-04-15 15:14:07
【问题描述】:
以下代码:
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 编译?这在任何地方都有记录吗?
【问题讨论】:
-
我猜值不一定是字符串。如果 value 是一个 Integer ,那么向它添加一个字符串是没有意义的。也许你可以尝试将值转换为字符串
-
@fedoraHacker 表达式
value = value + suffix是完全合法的,与值的类型无关。所以在我看来value += suffix也应该是合法的。 -
哇,我不知道。我认为不同对象的全部意义在于定义数据可以做什么和不能做什么的规则。拥有不同数据类型和对象的全部意义在于分离责任以确保类型只做一件事,但做得很好。我只是对您可以混合这样的数据类型感到困惑。好吧,你每天都会学到一些东西 :) 并且 Value = value + suffix 与 value += suffix 完全一样,所以我根本不质疑语法
-
是的,但是 String 类型有些特殊。这里的 + 运算符是“字符串连接运算符”;如果只有一个操作数是字符串,则在计算表达式之前将另一个操作数转换为字符串。见this section of the JLS。
-
啊,我明白了,不知道字符串是这样转换的。感谢您在问题得到解答后仍抽出时间回复!