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

Kotlin语法疑问:为何‘+ 变量 + 变量’写法不被判定为语法错误?

Kotlin表达式换行引发的隐性Bug

最近碰到一个坑人的低级Bug,问题出在表达式换行的写法上:

val total = anObject.oneLongVariableName + anObject.secondLongVariableName
           + anObject.thirdLongVariableName + anObject.fourthLongVariableName

这段代码看起来完全合法,编译也能通过,但实际运行时,第三个和第四个变量根本没加到total里——total的值只等于前两个变量的和。

正确的换行写法应该把运算符放在行尾,让编译器明确表达式还未结束:

val total = anObject.oneLongVariableName + anObject.secondLongVariableName +
             anObject.thirdLongVariableName + anObject.fourthLongVariableName

有意思的是,换成乘法运算符的话,同样的换行写法会直接报语法错误:

val product = anObject.oneLongVariableName * anObject.secondLongVariableName
             * anObject.thirdLongVariableName * anObject.fourthLongVariableName

但+和-运算符的这种写法却能通过编译,只是逻辑完全失效。根源在于Kotlin的行尾分号推断规则:当换行后的行首是+/-时,编译器会把它当成一元运算符处理,自动给上一行末尾加上分号。也就是说,第一行的表达式到第二个变量就结束了,后面的+ anObject.thirdLongVariableName + ...变成了一个独立的、未被使用的表达式,自然不会影响total的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:09:56