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

why Character.digit output in java8 jjs shell is not correct

用java8jjs研究jdkapi发现了这个,见下:

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 中是 returns -1?

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

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

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