You need to enable JavaScript to run this app. Java中String的charAt返回值赋值给int变量后输出值为何变化?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 10:36:04