有人可以解释以下与 java 中的 StringBuffer 相关的代码吗?

Can somebody explain below code related to StringBuffer in java?

StringBuffer sb=new StringBuffer("A");

现在增加我在代码下面写的字母 A-

if (sb.charAt(0)=='A') {
    sb.setCharAt(0, 'B');
} else {
    sb.setCharAt(0, 'C');
}

但是我在某处读到这也可以用下面的代码来完成(并且有效!)

sb.setCharAt(0, (char)(sb.charAt(0) + 1));

谁能解释一下上面的代码?

如果第一个字符是 A,则将第一个字符更改为 B。否则,将第一个字符设置为 C。您修改后的版本

sb.setCharAt(0, (char) (sb.charAt(0) + 1));

只会 以相同的方式 分别输入 AB (因为它增加了 StringBuffer 中的第一个字符).

当您执行 char + int 时,char 被解释为 int,表示 Unicode Table.

中使用的字符的索引

因此,当您执行 sb.charAt(0) + 1 时,它与 'A' + 1 相同,并计算为 65 + 1,等于 66(Unicode 中的 character indexed with that value Table 是 B)。

现在因为 setCharAt 期望作为第二个参数 char 你必须 (cast)intchar 这给出您返回 'B'sb.setCharAt(0, ..) 只需在您的 StringBuffer 的 0 位置设置该字符。

sb.charAt(0) 将检索第一个字符。所以 sb.charAt(0) + 1 会将第一个字符加 1(将 A 变成 B,将 B 变成 C,等等)。所以,假设第一个字符是 A。然后 sb.charAt(0) + 1 == 'B' 所以你的方法是 sb.setCharAt(0, 'B'),等等

这是因为隐式转换。您可能知道,每个字符都有它的 ASCII 数字表示。例如,字母 'A' 是数字 64。当您写

sb.setCharAt(0, (char) (sb.charAt(0) + 1));

它会自动(隐式)将字符转换为整数,因为它需要对其加 1。所以你的结果就变成了64+1 = 65. 之后,你显式 调用一个类型转换运算符(char) 将65 的整数转换为它所代表的char,它就是B.