You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中将字符串字符赋值给int数组时数值异常是什么原因?

问题原因
  • Java中的char类型本质上是UTF-16编码的数值,数字字符'0'到'9'对应的编码值是连续的,范围为48~57。你看到的57就是'9'的编码值,49是'1'的编码值。
  • 调用System.out.println(b.charAt(i))时,参数是char类型,println方法会直接输出字符对应的显示符号,而不是它的编码值,所以看起来是正常的。
  • 当你把char直接赋值给int类型的数组元素时,Java会自动把字符的编码值赋值给int变量,手动加(int)强转也是一样的逻辑,所以得到的不是预期的数字值。
解决方法

两种常用的修改方案:

  1. 利用数字字符编码连续的特性,减去'0'的编码值即可得到对应的数字:
num[i] = b.charAt(i) - '0';
  1. 先把字符转为字符串,再调用Integer的解析方法转为数字,可读性更高:
num[i] = Integer.parseInt(String.valueOf(b.charAt(i)));
修改后的完整代码
int a = 9119;
String b = a+"";
System.out.println(b);
int [] num = new int[b.length()];
String c = "";

for (int i = 0; i < b.length(); i++)
{
    System.out.println(b.charAt(i));
    num[i] = b.charAt(i) - '0';
    //c += (num[i] * num[i])+"";System.out.println(c);
}
for (int w : num)
{
    System.out.println(w);
}

修改后输出的数组值就会是预期的9、1、1、9。

内容的提问来源于stack exchange,提问作者purpleme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:05