Java中String的charAt返回值赋值给int变量后输出值为何变化?
问题根本原因
这个输出差异是Java的隐式类型转换逻辑、不同类型的打印规则共同导致的,代码本身没有语法错误:
String.charAt()方法的返回值是char类型,本质是存储了单个字符Unicode编码的基础数值类型,只是赋予了字符的语义封装- 直接把char类型值传给
System.out.println()打印时,控制台会根据编码映射输出对应的可视化字符,因此你看到和字符串内容一致的6 - 当你把char类型返回值赋值给int类型的temp变量时,Java会触发自动类型转换:因为char是范围0~65535的无符号16位数值,完全兼容int的表示范围,因此转换过程不会做任何语义换算,直接把char对应的Unicode十进制编码存入int变量。你测试场景里的字符是
'6',它的十进制Unicode编码恰好是54,因此打印int类型的temp时,输出的是这个编码值54,而非字符本身。
拿到字符对应数字值的正确写法
如果你的目标是获取字符'6'对应的整数值6,而不是它的编码值,可以直接用两种标准写法:
- 调用JDK内置字符工具方法转换:
int temp = Character.getNumericValue(a1.charAt(num)); - 利用数字字符的编码连续性做偏移计算:
int temp = a1.charAt(num) - '0';
这种写法的原理是,'0'到'9'所有阿拉伯数字字符的Unicode编码是连续递增的,用目标字符的编码减去'0'的编码,刚好得到对应的数字值。
内容的提问来源于stack exchange,提问作者Maximilian Lee
相关产品推荐
相关产品推荐

