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

Java 8 为什么java8 jjs shell中的Character.digit输出不正确,java-8,nashorn,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?这与Java方法的自动

使用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?

这与Java方法的自动解析有关。由于字符在内部表示为int,因此Nashorn将把digit方法解析为接受Unicode码点(int)和基数的方法

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

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