【发布时间】:2014-09-16 06:59:38
【问题描述】:
我正在解决 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)。
我想知道在第一种情况下使用+= 运算符时实际发生了什么。根据docs on assignment operators:E1 op= E2等价于E1 = (T)((E1) op (E2))。所以我希望后一个表达式输出"168",就像使用+= 运算符一样。但以下输出正确的是"TT",而不是"168":
result = (String)(result + str.charAt(0) + str.charAt(0));
我是否误解了文档?我还在 SO 上发现了一个 answer,这表明 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() 与 String 和 += 结合使用时实际发生了什么,因为我发现的两个“等价物”(如果我正确地将它们从两到三个术语翻译)确实不会产生相同的结果。
【问题讨论】:
-
说“不要那样做”就足够了吗?如果没有,请查看operator precedence。
-
不,我可以轻松超越这个问题,但我也想从中学习。感谢您的链接!我总是忘记考虑运算符优先级。
-
有点像西班牙宗教裁判所。
-
没人期待西班牙宗教裁判所!
标签: java string operators charat