为什么 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
用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