为什么java8 jjs shell中的Character.digit输出不正确

时间:2015-12-11 04:09:58

标签: java-8 nashorn

使用java8 jjs学习jdk api并找到了这个,见下文:

jjs> var result = java.lang.Character.digit('473'.charAt(0),10)
jjs> result
-1
jjs> '473'.charAt(0)
4

但如果我在java main中执行了上面的代码,那就得到4。

System.out.println(Character.digit('4', 10));//4

为什么在jjs中它返回-1?

1 个答案:

答案 0 :(得分:2)

这与Java方法的自动解决有关。由于char在内部表示为int,因此Nashorn会将digit方法解析为接受Unicode codePoint(int)和radix的方法。

如果要确保调用接受字符(char)和基数的digit方法,则应明确解析要调用的方法,如下所示:

$ jjs
jjs> var digit = java.lang.Character['digit(char,int)']
jjs> digit('473'.charAt(0), 10)
4