java 中的 int 数组不包含预期值

int array in java wont contain expected value

我希望我的数组 num cosist 来自我的字符串 b 像这样:

num[0] = 9;
num[1] = 1;
num[2] = 1;
num[3] = 9;

但不知何故,9 变成了 57,1 变成了 1。我不明白为什么。当我打印出 b.charAt(i) 时,数字是正确的,但是当我尝试初始化数组时,数字就会改变。 我也尝试使用 (int)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);
    //c += (num[i] * num[i])+"";System.out.println(c);
}
for (int w : num)
{
    System.out.println(w);
}

这是控制台输出:

9119
9
1
1
9
57
49
49
57

在行 num[i] = b.charAt(i); 中,您基本上是将字符 9 转换为其十进制表示形式,即 571也是如此,十进制表示为49.

如果您将 int[] num 变成 char[] num,一切都会按预期进行。此外,使用 String.valueOf()int 转换为 String:

int a = 9119;
String b = String.valueOf(a);
System.out.println(b);
char[] num = new char[b.length()];

for (int i = 0; i < b.length(); i++) {
    System.out.println(b.charAt(i));
    num[i] = b.charAt(i);
}

for (char w : num) {
    System.out.println(w);
}

注意 char '9' 与 int 9 不同,

char a = '9'; 
int b = a;

对于这样的代码,它会通过字母'9'的ASCII码自动将char'9'转换为int,在ASCII table中,'9'是第57个字母,所以自动转换会让我们的 int b 赋值为 57。类似于 char '1' 的想法,int ASCII table,数字是 49.