Java中char与int转换本质是Unicode码点的数值转换:char转int可隐式拓宽(如'A'→65),int转char需显式窄化并校验范围(0–65535)。

Java 中 char 和 int 的转换本质是基于 Unicode 编码值的隐式/显式数值转换,不是字符串解析,也不涉及字符集解码。
char 转 int:直接赋值或强制转换(推荐直接赋值)
char 在 Java 中本质是无符号 16 位整数(0 到 65535),可自动提升为 int。例如:
-
char c = 'A'; int i = c;→i的值是65('A' 的 Unicode 码点) - 不需要写
(int)c,因为这是拓宽转换(widening conversion),编译器允许隐式进行 - 即使字符是中文,如
char c = '中'; int i = c;,i得到的是20013(UTF-16 编码值)
int 转 char:必须强制转换,且需确保值在有效范围内
int 转 char 是窄化转换(narrowing conversion),必须显式强转,并注意范围安全:
-
int i = 65; char c = (char) i;→c是'A' - 若
i超出char范围(0–65535),会发生静默截断:如(char) 70000实际得到70000 % 65536 = 4464对应的字符 - 建议加校验:
if (i >= 0 && i
常见误区:别和字符串转换混淆
以下操作和 char↔int 数值转换无关:
立即学习“Java免费学习笔记(深入)”;
-
"65".charAt(0)得到的是字符'6'(Unicode 值 54),不是数字 65 -
Integer.parseInt("65")是把字符串解析成整数,不是类型转换 -
String.valueOf((char)65)得到字符串"A",属于构建字符串,非类型转换本身
实际用途举例
这类转换常用于:
- 大小写转换:
char lower = (char)('A' + 32);→'a' - 判断是否为数字字符:
if (c >= '0' && c (利用字符编码连续性) - 简单加密/移位(如凯撒密码):
char enc = (char)(c + 3); - 生成字母序列:
for (int i = 'a'; i
不复杂但容易忽略细节:关键是记住 char 就是数字,它的值就是 Unicode 码点,所有转换都是数值层面的。


















