以下表达式的结果
ret + str.charAt(i) + str.charAt(i);
是String连接的结果。Java语言规范说明
字符串串联的结果是对String对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。
的结果
str.charAt(i) + str.charAt(i);
是将加法运算符应用于两个数字类型的结果。Java语言规范说明
当应用于两个数字类型的操作数时,binary +运算符将执行加法运算,从而得出这些操作数的总和。[…]数字操作数上加法表达式的 类型是其操作数的
提升 类型。
在这种情况下
str.charAt(i) + str.charAt(i);
成为
int两个
char值的和。然后将其连接到
ret。
您可能还想了解有关复合赋值表达式的信息
+=
形式的复合赋值表达式
E1 op= E2等效于E1 = (T) ((E1) op(E2)),其中T是的类型E1,不同之处在于该表达式E1仅被评估一次。
换一种说法
ret += str.charAt(i) + str.charAt(i);
相当于
ret = (String) ((ret) + (str.charAt(i) + str.charAt(i)));| ^ integer addition|^ string concatenation



