Java中char与int运算是数值运算,char本质是16位整数,参与运算时自动提升为int,结果恒为int类型;字符与数字互转需用'0'加减或Character.getNumericValue()。

Java中char与int的运算本质是数值运算,不是字符操作。char在内存里就是16位整数,参与运算时自动提升为int,所以结果总是int类型。
char和int混合运算时自动提升为int
Java规定:所有byte、short、char在算术表达式中都会先被提升为int,再进行计算。即使你只写'a' + 1,实际执行的是97 + 1,结果是98(int类型)。
-
char c = 'A'; int result = c + 32;→ result = 97,不是字符'a',而是整数97 - 想得到字符,必须显式转回:
char lower = (char)(c + 32); - 哪怕右边是long或float,左边char也先变int,再整体向上对齐(如遇到float就全转float)
数字字符转对应数值:别直接赋值,要减'0'
把字符'5'变成整数5,不能写int n = '5';(那得到53),而要利用ASCII连续性:
-
char c = '7'; int digit = c - '0';→ 55 - 48 = 7 - 同样,整数5转字符'5':用
char ch = (char)('0' + 5);→ 48 + 5 = 53 → '5' - 更健壮可用
Character.getNumericValue(c),它支持'0'–'9'、'a'–'z'等
大小写转换与范围检查
英文字母ASCII连续,'a' - 'A' == 32,但必须确保输入是字母,否则结果无意义:
立即学习“Java免费学习笔记(深入)”;
- 转小写:
if (c >= 'A' && c - 转大写:
if (c >= 'a' && c - 避免对非字母字符(如'@'、'1')做这类运算,容易得到控制符或乱码
int转char前务必校验范围
char合法值是0–65535。超出范围的int强制转char会静默截断低16位:
-
int code = 70000; char c = (char)code;→ 实际是70000 & 0xFFFF = 4464,对应某个Unicode字符,未必是你想要的 - 建议加判断:
if (code >= 0 && code - 对ASCII字符(0–127),可放宽到
code >= 0 && code ,更安全


















