ret += ... ; // returns numbers ret = ret + ...; // returns chars
下面的代码重复了这些字符:
doubleChar(“The”)→“TThhee”
public String doubleChar(String str) { String ret = ""; for(int i = 0; i < str.length(); i++) { ret = ret + str.charAt(i) + str.charAt(i); // it concatenates the letters correctly //ret += str.charAt(i) + str.charAt(i); // it concatenates numbers } return ret; }
解决方法
ret + str.charAt(i) + str.charAt(i);
是String连接的结果. The Java language specification states
The result of string concatenation is a reference to a String object
that is the concatenation of the two operand strings. The characters
of the left-hand operand precede the characters of the right-hand
operand in the newly created string.
的结果
str.charAt(i) + str.charAt(i);
是加法运算符应用于两种数值类型的结果. The Java language specification states
The binary + operator performs addition when applied to two operands
of numeric type,producing the sum of the operands.
[…]
The type of an additive expression on numeric operands is the promoted
type of its operands.
在这种情况下
str.charAt(i) + str.charAt(i);
成为一个保持两个char值的和的int.然后连接到ret.
您可能还想知道关于复合赋值表达式=的信息
A compound assignment expression of the form
E1 op= E2
is equivalent
toE1 = (T) ((E1) op (E2))
,whereT
is the type ofE1
,except thatE1
is evaluated only once.
换一种说法
ret += str.charAt(i) + str.charAt(i);
相当于
ret = (String) ((ret) + (str.charAt(i) + str.charAt(i))); | ^ integer addition | ^ string concatenation