java中char本质是无符号16位整数(0~65535),既可作字符也可参与算术运算;运算结果默认为int,赋值给char需强制转换;常用转换包括数字字符与int互转、大小写切换等。

Java 中的 char 类型本质是无符号 16 位整数(取值范围 0~65535),因此可以直接参与算术运算,也能和 int 等整数类型互相转换。关键在于理解它“既是字符,也是数字”的双重身份。
char 可以直接做加减乘除运算
因为 char 在底层用 Unicode 码点表示,所以像 'a' + 1 这样的表达式是合法的,结果是 98(即 'b' 的 Unicode 值)。注意:运算结果默认是 int 类型,若要赋值给 char 变量,需显式强制转换:
char c = 'A'; c = (char)(c + 3); // 结果是 'D'char a = 'z'; char b = (char)(a - 25); // 得到 'a'- 不转型直接赋值会编译报错:
char d = '0' + 1;❌(因为'0' + 1是int)
字符与数字之间的常见转换方式
常用场景包括:数字字符转对应整数、整数转对应数字字符、大小写切换等。
-
数字字符 → 对应 int 值:用减法去掉字符偏移,如
'5' - '0'得5 -
int 值(0–9)→ 对应数字字符:加上
'0',如(char)(7 + '0')得'7' -
小写转大写:
(char)('a' - 32)或更安全地用Character.toUpperCase('a') -
判断是否为数字字符:推荐用
Character.isDigit(c),比c >= '0' && c 更健壮(支持全角数字等)
容易踩坑的细节
虽然 char 能当整数用,但语义和范围限制必须留意:
- 运算可能越界:例如
(char)('z' + 1)得到的是{(Unicode 123),不是预期的字母 - 不能直接把负数转成 char:
(char)(-1)合法但得到的是 Unicode 65535(即'\uffff'),不是可见字符 - 字符串中单个字符提取后仍是
char,如"Hello".charAt(0)返回'H',可直接参与运算 - 慎用自动提升:
char + char结果是int,不是char;char + short也升为int
实用小技巧:批量处理字符
比如遍历字符串做位移加密(凯撒密码)或校验:
-
String s = "abc"; StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { sb.append((char)(c + 1)); }→"bcd" - 还原时反向操作:
(char)(c - 1),注意检查边界(如'a' - 1会变成'`') - 大小写保持的位移:先判断
Character.isLowerCase(c),再按规则调整,避免把标点乱改
掌握 char 的整数本质,就能灵活做字符计算和转换,不必依赖字符串拆解或包装类,既高效又直观。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











