Почему Нашорн добавляет два целых числа, получая двойные? - PullRequest
2 голосов
/ 01 ноября 2019

Я использую 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, возможно ли это? любая идея?

1 Ответ

0 голосов
/ 01 ноября 2019

Я предполагаю, что nashorn сначала компилирует выражение в байт-код или некоторый промежуточный код, а затем оценивает его. Компилятор может вычислить первое выражение, поскольку все значения являются литеральными, тогда как второе вычисляется во время выполнения.

...