You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Java的+运算符可拼接String与StringBuilder,却无法拼接其他类对象?

Java +运算符特殊行为原理说明

核心规则

Java是不支持用户自定义运算符重载的,只有+运算符是语言层面唯一做了特殊重载的运算符,仅支持两类合法运算场景,具体规则来自Java语言规范:

  • 算术运算场景:两个操作数均为基础数值类型或其对应包装类时,执行数值加法运算
  • 字符串拼接场景:只要任意一个操作数为String类型,编译器就会自动将另一个操作数转换为字符串类型,再执行拼接操作,另一个操作数为任意引用类型时都会自动调用其toString()方法完成转换。

两种场景差异的原因

  • 你测试的new StringBuilder("abc") + new String("zyz")符合字符串拼接场景规则:右侧操作数是String类型,触发拼接逻辑,编译器会自动调用StringBuilder的toString()方法将其转为字符串,再完成拼接,所以不会报错。
  • 你测试的new Person() + d1场景中,两个操作数既不都属于数值类型,也没有任意一个是String类型,没有命中+运算符的任何合法运算规则,所以编译期直接报类型不匹配错误。

补充验证

你可以尝试运行System.out.println(new Person() + "测试字符串");,这段代码是可以正常编译执行的,输出结果为Person对象的toString()返回值拼接"测试字符串"的结果,进一步印证了上述规则的有效性。

内容的提问来源于stack exchange,提问作者abc123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:06