有人可以解释以下与 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));
只会 以相同的方式 分别输入 A
和 B
(因为它增加了 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) 那 int
到 char
这给出您返回 '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.
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));
只会 以相同的方式 分别输入 A
和 B
(因为它增加了 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) 那 int
到 char
这给出您返回 '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.