Если следующая программа работает под JDK 11:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
System.out.println(engine.eval("var result = java.lang.Integer.valueOf(1) + 1; result").getClass());
System.out.println(engine.eval("java.lang.Integer.valueOf(1) + 1").getClass());
Результаты будут:
класс java.lang.Integer
класс java.lang. Double
Но под JDK8:
класс java.lang. Double
класс java.lang. Double
Почему Nashorn меняет тип, когда он назначается переменной, по сравнению с тем, когда он используется напрямую?