为什么Nashorn将两个整数相加会产生double?

时间:2019-11-01 05:36:49

标签: java nashorn

我正在使用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)应该给6nashorn.put(three, 3.0)应该给6.0,可以吗?任何想法?

1 个答案:

答案 0 :(得分:0)

我的猜测是nashorn首先将表达式编译为字节码或某些中间代码,然后对其求值。编译器可以对第一个表达式求值,因为所有值都是文字值,而第二个值在运行时求值。