考虑以下代码示例:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Tester {
public static void main( String[] args ) throws Exception {
ScriptEngine se = new ScriptEngineManager().getEngineByName( "nashorn" );
Object eval = se.eval( "5%5" );
System.out.println( "eval = " + eval );
System.out.println( "eval.getClass() = " + eval.getClass() );
}
}
为什么它会产生以下输出?
eval = 0.0
eval.getClass() = class java.lang.Double
结果类型java.lang.Double
很奇怪。
如果余数不同于 0,它会正确返回java.lang.Integer
,例如5%2
返回java.lang.Integer' with value
1`。
只有 0 有点特别。
在 Firefox 32.0.2(FindBugs 控制台)中尝试相同的 JavaScript 表达式可以正常工作并返回纯 0。
有什么办法可以强制 Nashorn 返回 Integer 类型而不是 Double?