gpt4 book ai didi

带有 charAt() 方法的 String 上的 Java += 运算符导致 char 添加

转载 作者:搜寻专家 更新时间:2023-11-01 01:10:12 24 4
gpt4 key购买 nike

我正在解决 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));

我是不是误解了文档?我还找到了一个 answer在 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() 与 String 和 += 结合使用时实际发生了什么,因为我发现了两个“等价物”(如果我已经正确地将它们从两个术语翻译成三个术语)不会产生相同的结果。

最佳答案

result = result + str.charAt(0) + str.charAt(0);

result 是一个字符串,所以第一个 + 执行字符串连接,产生另一个字符串。按照同样的逻辑,第二个 + 也将执行字符串连接。这给出了预期的结果。

result += str.charAt(0) + str.charAt(0);

首先计算右侧 str.charAt(0) + str.charAt(0)。现在,您要添加两个字符,其工作方式类似于简单的整数加法,即添加 ASCII 值。然后,我们将此结果(int -- 在本例中为 84)附加到 result,这就是您所看到的。

char c = 'T';
System.out.println(c + c);
168

这里的根本区别只是评估事物的顺序。

关于带有 charAt() 方法的 String 上的 Java += 运算符导致 char 添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com