如下代码:
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进行编译?这在任何地方都有记录吗?
我猜值不一定是String。如果value是一个Integer,那么我就没有必要添加一个字符串了。Maybye,您可以尝试将值转换为字符串
—
fedoraHacker,
@fedoraHacker
—
Grodriguez
value = value + suffix
无论值的类型如何,表达式 都是完全合法的。所以在我看来,这也value += suffix
应该合法。
哇,我不知道 我认为,不同对象的全部目的是为数据可以做什么和不能做什么定义规则。具有不同的数据类型和对象的全部目的是分离责任,以确保类型能够做一件事,但要做好。我感到困惑的是,您可以混合这样的数据类型。好吧,您每天都会学到一些东西:)和值=值+后缀与值+ =后缀完全相同,所以我完全不质疑语法
—
fedoraHacker
是的,但是String类型有些特殊。这里的+运算符是“字符串串联运算符”;如果只有一个操作数是字符串,则在对表达式求值之前,另一个将转换为字符串。请参阅JLS的本部分。
—
Grodriguez
啊,我明白了,不知道字符串是那样转换的。感谢您抽出宝贵的时间回答问题,即使问题已经解决!
—
fedoraHacker