Java中char转int是直接取Unicode码点值的数值提升,如'A'→65、'0'→48、'中'→20013;字符'0'与数值0不同,常用'5'-'0'得5;需据意图选直接赋值或减法校验。

Java中char转int不是“映射”,而是直接取其Unicode码点值,本质是数值提升(widening primitive conversion),无需额外操作。
char转int的本质:Unicode码点值
char在Java中是16位无符号整数类型,底层存储的就是字符对应的Unicode码点(0~65535)。当赋值给int时,编译器自动执行隐式类型提升,结果就是该字符的数值表示。
-
'A'→65(大写字母A的Unicode十进制值) -
'0'→48(数字字符'0'对应48,不是数值0) -
'中'→20013(汉字“中”的Unicode码点) -
'\u0000'→0(空字符,最小合法char值)
常见误区分:字符字面量 vs 数值字面量
容易混淆的是字符'0'和整数0——它们类型不同、值也不同:
-
char c = '0'; int i = c;→i == 48 -
int i = '0' - '0';→ 结果是0(利用相对差值获取数字含义) -
int i = '5' - '0';→ 结果是5(常用技巧,将数字字符转对应int值)
安全转换建议:明确意图,避免隐式陷阱
虽然自动转换合法,但应根据实际需求选择写法:
立即学习“Java免费学习笔记(深入)”;
- 若需字符的编码值(如加密、协议传输)→ 直接赋值:
int code = ch; - 若需字符代表的数字(如解析"123")→ 用减法:
int digit = ch - '0';(仅对'0'~'9'有效) - 若不确定字符范围,先校验:
if (ch >= '0' && ch - 避免用
(int)ch强制转换——不必要,且掩盖了本就是数值的事实
扩展说明:为什么不是ASCII?
Java的char基于Unicode,不是ASCII。ASCII只覆盖0~127,而Javachar可表示0~65535(基本多文种平面)。英文字符与ASCII一致,但中文、emoji等远超ASCII范围。可通过Character.codePointAt("中", 0)获取完整码点(对增补字符需注意代理对)。


















