ASCII字符运算后无法还原原字符串,咨询追加至字符串时ASCII数值是否改变
问题分析与解决
嘿,我来帮你理清楚这个问题~你遇到的核心问题不是ASCII数值在追加到字符串时发生了变化,而是你对char变量c做的c += c + 0操作直接修改了它的原始值,导致你后续追加的已经不是原来的字符了。
拆解你代码里的关键操作
我们一步步看c += c + 0到底做了什么:
- 初始状态:
char c = "e".charAt(0),此时c对应的ASCII值是101,字符是'e'。 - 计算
c + 0:Java里char类型会自动向上转型为int,所以这一步实际是101 + 0 = 101(还是int类型)。 - 执行
c += 101:这等价于c = (char)(c + 101),也就是101 + 101 = 202,然后把int的202强制转成char。而ASCII值202对应的字符是Æ,已经完全不是原来的'e'了。
所以你用b.append(c+=c+0)追加的是修改后的字符Æ,而不是原始的'e',自然没法还原出原字符串。
正确的字符追加方式
如果你只是想把原始的ASCII字符追加到StringBuilder里,不需要修改char变量本身,直接追加原始的c就可以了:
StringBuilder b = new StringBuilder(); char c = "e".charAt(0); System.out.println(c); // 输出 'e' System.out.println(c + 0); // 输出 101 b.append(c); // 直接追加原始字符,此时b里的内容是"e"
总结
- 当你把ASCII字符追加到字符串时,只要你没有主动修改字符变量的数值,它的ASCII值是不会发生变化的。
- 你的问题出在
c += c + 0这个赋值操作,它直接改变了c的原始ASCII值,导致后续追加的是一个全新的字符。
内容的提问来源于stack exchange,提问作者logger
相关产品推荐
相关产品推荐

