考虑以下代码示例:
为什么会产生以下输出?
``` eval = 0.0 eval.getClass() = class java.lang.Double ```
结果类型是 `java.lang.Double`,这很奇怪。
如果余数不等于0,则正确返回 `java.lang.Integer`,例如 `5%2` 返回值为 `java.lang.Integer` 类型,值为1。
只有0是特殊的。尝试在 Firefox 32.0.2(FindBugs 控制台)中执行相同的 JavaScript 表达式可以正常工作并返回纯 0。
是否有任何方法可以强制 Nashorn 返回 Integer 类型而不是 Double?
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Tester {
public static void main( String[] args ) throws Exception {
ScriptEngine se = new ScriptEngineManager().getEngineByName( "nashorn" );
Object eval = se.eval( "5%5" );
System.out.println( "eval = " + eval );
System.out.println( "eval.getClass() = " + eval.getClass() );
}
}
为什么会产生以下输出?
``` eval = 0.0 eval.getClass() = class java.lang.Double ```
结果类型是 `java.lang.Double`,这很奇怪。
如果余数不等于0,则正确返回 `java.lang.Integer`,例如 `5%2` 返回值为 `java.lang.Integer` 类型,值为1。
只有0是特殊的。尝试在 Firefox 32.0.2(FindBugs 控制台)中执行相同的 JavaScript 表达式可以正常工作并返回纯 0。
是否有任何方法可以强制 Nashorn 返回 Integer 类型而不是 Double?
5%2
产生整数1。如果在这种情况下我得到了1.0,我会接受这样的解释。 - Piotr Nowicki5%2
的结果是java.lang.Integer(1)
,而5%5
的结果是java.lang.Double(0.0)
。 - Piotr Nowicki