我是一名有用的助手,可以为您翻译文本。
我正在解决Codingbat.com上的问题,并发现对于
假设我有两个变量:
我得到了
我想知道在第一个使用
仍然会得到
抱歉文章很长!我只是好奇在使用字符串和
我正在解决Codingbat.com上的问题,并发现对于
+=
运算符, a + = b
不一定完全等于 a = a + b
。这是众所周知的,并且之前已经在SO上讨论过,但是当我使用 charAt()
方法与上述语法结合使用时,遇到了一些奇怪的事情,我无法理解。假设我有两个变量:
String str = "The";
String result = "";
我想将“str”中的第一个字母重复两次添加到“result”中。一种实现方法是:
result = result + str.charAt(0) + str.charAt(0);
这会导致 result = "TT"
。
然而,如果我使用 +=
运算符,例如:
result += str.charAt(0) + str.charAt(0);
我得到了
result = "168"
。显然进行了字符加法('T'的ASCII码为84,84*2=168)。我想知道在第一个使用
+=
运算符的情况下实际发生了什么。根据赋值运算符文档: E1 op= E2
等同于E1 = (T)((E1) op (E2))
。因此,我期望后面的表达式像使用+=
运算符一样输出"168"
。但是以下代码正确地输出"TT"
,而不是"168"
:result = (String)(result + str.charAt(0) + str.charAt(0));
我是不是误解了文档?我在SO上也找到了一个答案,它表明str1 += str2
等同于:
str1 = new StringBuilder().append(str1).append(str2).toString();
但是评估以下内容:
result = new StringBuilder().append(str.charAt(0)).append(str.charAt(0)).toString();
仍然会得到
"TT"
,而不是"168"
。抱歉文章很长!我只是好奇在使用字符串和
+=
时,与charAt()
结合使用时实际发生了什么,因为我找到的这两个“等价”的表达式(如果我正确地将它们从二转换为三个术语)并不产生相同的结果。