The concatenation of chars to form a string gives different results(连接字符以形成字符串会产生不同的结果)
问题描述
为什么,当我使用下面的操作对字符求和时,它返回的是数字而不是字符?它不应该给出相同的结果吗?
Why, when I use the operation below to sum chars, does it return numbers instead of chars? Shouldn't it give the same result?
ret += ... ; // returns numbers
ret = ret + ...; // returns chars
下面的代码复制了字符:
The code below duplicates the chars:
doubleChar("The") → "THhee"
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);
是字符串连接的结果.Java 语言规范声明一个>
is the result of String concatenation. The Java language specification states
字符串连接的结果是一个String对象的引用那是两个操作数字符串的连接.那些角色左边的操作数在右边的字符之前新创建的字符串中的操作数.
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);
是加法运算符应用于两种数字类型的结果.Java 语言规范声明一个>
is the result of the additive operator applied to two numeric types. The Java language specification states
二元 + 运算符在应用于两个操作数时执行加法数字类型,产生操作数的总和.[...]数字操作数上的加法表达式的类型是 promoted其操作数的类型.
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);
变成一个 int
保存两个 char
值的总和.然后将其连接到 ret
.
becomes an int
holding the sum of the two char
values. That is then concatenated to ret
.
您可能还想了解复合赋值表达式 +=
You might also want to know this about the compound assignment expression +=
E1 op= E2
形式的复合赋值表达式是等价的到E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,除了E1
只评估一次.
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
这篇关于连接字符以形成字符串会产生不同的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:连接字符以形成字符串会产生不同的结果
基础教程推荐
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01