为什么java从相同的方法参数返回不同的类型?

时间:2017-03-15 11:20:55

标签: java types

为什么我不能为数组分配正常数字?

<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>

4 个答案:

答案 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] = 9a[i] = String.valueOf(r).charAt(i);),所以当我调用a[2]时,它必须返回9 - 存储在arrray的第三个元素中的值。我不需要那个数字的十进制值,我不是“对java说”。

啊,但你是。 :-) println 重载 - 根据您提供的参数的类型,它有不同的版本。

当你这样做时:

a[i] = String.valueOf(r).charAt(i);

您正在使用char(返回值为charAt)并提升为inta[i]的类型)。 char'9'将提升为int值57(该字符的数字版本)。然后当你做

System.out.println(a[i]);

a[i]int)的类型决定调用哪个printlnprintln(int)println(int)输出您给出的数字的十进制表示:57。

当你这样做时

System.out.println(String.valueOf(r).charAt(i));

String.valueOf(r).charAt(i)的类型为charcharAt的返回类型),因此您拨打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;