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)强转也是一样的逻辑,所以得到的不是预期的数字值。
解决方法
两种常用的修改方案:
- 利用数字字符编码连续的特性,减去
'0'的编码值即可得到对应的数字:
num[i] = b.charAt(i) - '0';
- 先把字符转为字符串,再调用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
相关产品推荐
相关产品推荐

