Ron*_*tro 10 java string concatenation char
为什么,当我使用下面的操作来计算字符时,它是否返回数字而不是字符?它不应该给出相同的结果吗?
ret += ... ; // returns numbers
ret = ret + ...; // returns chars
Run Code Online (Sandbox Code Playgroud)
下面的代码重复了字符:
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;
}
Run Code Online (Sandbox Code Playgroud)
Sot*_*lis 11
以下表达式的结果
ret + str.charAt(i) + str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
是字符串连接的结果.Java语言规范说明
字符串连接的结果是对String对象的引用,该对象是两个操作数字符串的串联.左侧操作数的字符位于新创建的字符串中右侧操作数的字符之前.
的结果
str.charAt(i) + str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
是添加运算符应用于两种数字类型的结果.Java语言规范说明
当应用于两个数值类型的操作数时,binary +运算符执行加法,产生操作数的总和.[...]数字操作数上的加法表达式的 类型是其操作数的提升类型.
在这种情况下
str.charAt(i) + str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
成为int持有两个char值的总和.然后连接到ret.
您可能还想了解有关复合赋值表达式的信息 +=
除了 仅计算一次之外,表单的复合赋值表达式
E1 op= E2等效于E1 = (T) ((E1) op (E2)),whereT的类型.E1E1
换一种说法
ret += str.charAt(i) + str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
相当于
ret = (String) ((ret) + (str.charAt(i) + str.charAt(i)));
| ^ integer addition
|
^ string concatenation
Run Code Online (Sandbox Code Playgroud)