为什么我不能为数组分配正常数字?
<select id="srcCurrency" ng-model="params.srcCurrency" ng-change="switchCurrencies(params.srcCurrency, 'source')">
<option>USD</option>
<option>KRW</option>
</select>
<select id="dstCurrency" ng-model="params.dstCurrency" ng-change="switchCurrencies(params.dstCurrency, 'dest')">
<option >USD/option>
<option >KRW</option>
</select>
答案 0 :(得分:3)
通过“返回”我假设你的意思是“输出”。 println
不会返回任何内容。
输出不同,因为您正在调用不同的方法。在这一行:
System.out.println(a[i]); // returns numbers from 48 to 57 (dec)
...你正在调用System.out.println(int)
,它输出你在a[i]
中存储的数值的十进制表示,这是字符的数值(例如,字符为57) '9'
)。
但是就这一行:
System.out.println(String.valueOf(r).charAt(i)); // returns numbers from 0 to 9
...您正在调用System.out.println(char)
,它会输出实际字符(例如'9'
)。
你在评论中说过:
啊,但你是。 :-)如果r例如是789且i = 2,那么该代码将返回9,对吗?然后我分配
a[2] = 9
(a[i] = String.valueOf(r).charAt(i);
),所以当我调用a[2]
时,它必须返回9
- 存储在arrray的第三个元素中的值。我不需要那个数字的十进制值,我不是“对java说”。
println
重载 - 根据您提供的参数的类型,它有不同的版本。
当你这样做时:
a[i] = String.valueOf(r).charAt(i);
您正在使用char
(返回值为charAt
)并将提升为int
(a[i]
的类型)。 char
值'9'
将提升为int
值57(该字符的数字版本)。然后当你做
System.out.println(a[i]);
a[i]
(int
)的类型决定调用哪个println
:println(int)
。 println(int)
输出您给出的数字的十进制表示:57。
当你这样做时
System.out.println(String.valueOf(r).charAt(i));
String.valueOf(r).charAt(i)
的类型为char
(charAt
的返回类型),因此您拨打println(char)
。 println(char)
输出您提供的字符,'9'
。
答案 1 :(得分:2)
数组由字符的UTF-16值而不是实际数字填充。您可以使用Character.digit(char c, int radix)
获取数值:
a[i] = Character.digit(String.valueOf(r).charAt(i), 10);
答案 2 :(得分:1)
您在标题和正文中提出了不同的问题:
为什么java从相同的方法参数中返回不同的类型?
对System.out.println
的两次调用都接受(不返回)不同类型(代码中第一次调用char
,第二次调用int
),因为println
方法已超载(有关重载的一般讨论,请参阅:https://en.wikipedia.org/wiki/Function_overloading)
为什么我不能将正常数字分配给数组?
您当然可以将“普通数字”分配给int []数组。但请注意这一行:
a[i] = String.valueOf(r).charAt(i);
可能没有按照您的想法进行:它不是在字符串i
中的索引r
处分配'数字',而是为该数字指定ASCII(实际为Unicode)代码。
答案 3 :(得分:-1)
阅读有关&#34; Java Autoboxing和Unboxing&#34;