我正在使用Java nashorn评估javascript,一些与数字有关的行为使我感到困惑。
ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");
Object result = nashorn.eval("3 + 3");
这将为6
提供类型java.lang.Integer
,
但是
ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");
nashorn.put(three, 3);
Object result = nashorn.eval("three + 3");
这为6.0
提供了类型java.lang.Double
。
为什么会这样?
我期望nashorn.put(three, 3)
应该给6
,nashorn.put(three, 3.0)
应该给6.0
,可以吗?任何想法?
答案 0 :(得分:0)
我的猜测是nashorn首先将表达式编译为字节码或某些中间代码,然后对其求值。编译器可以对第一个表达式求值,因为所有值都是文字值,而第二个值在运行时求值。