You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:05:33