Java中char类型变量执行ch++后从'9'变为':'的原因是什么?
核心原因解释
- Java 的
char类型本质是占2字节的无符号整数,存储的是字符对应的Unicode码点数值,不绑定“数字、字母、符号”这类字符分类语义。 ch++操作的逻辑非常直接:对char存储的整数值做+1运算,运算完成后直接读取新数值对应的Unicode字符输出,不会自动识别字符类别去匹配“同序列下一个字符”的预期。
按照Unicode与ASCII兼容的基础码表规则,相邻码点的字符排列是固定的:
- 大写英文字母的码点范围从
U+0041('A',对应十进制65)到U+005A('Z'),码点完全连续,因此'A'自增1后刚好匹配'B',和预期一致。 - 十进制数字字符的码点范围从
U+0030('0',对应十进制48)到U+0039('9',对应十进制57),码点同样连续,因此'0'自增1到'1'也符合直觉。 - 紧跟在'9'(码点0x39)之后的连续码点是
U+003A,该码点对应的字符就是西文冒号:,因此执行完ch++后输出冒号是完全符合语言规则的正常结果。
如果继续对这个变量做自增操作,后续会依次输出分号;、小于号<、等于号=、大于号>等标点符号,直到码点走到U+0041时才会重新出现大写字母'A'。
内容的提问来源于stack exchange,提问作者Milith De silva
相关产品推荐
相关产品推荐

