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

问题描述 投票:0回答:1

我正在使用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,这可能吗?任何想法?

java nashorn
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.