我正在使用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
,这可能吗?任何想法?
我的猜测是,nashorn首先将表达式编译为字节码或某些中间代码,然后对其求值。编译器可以评估第一个表达式,因为所有值都是文字,而第二个则在运行时评估。