Java 8 为什么nashorn将Integer.MIN_值视为双精度值?

Java 8 为什么nashorn将Integer.MIN_值视为双精度值?,java-8,nashorn,Java 8,Nashorn,我在一些Javascript中传递Integer.MIN_值,它只返回输入。但是,当我使用ScriptValueConverter.unwrapValue(returnedObject)比较Javascript的结果时,似乎值是相同的,但类型是double,而我期望的是整数 然而,当我传入Integer.MAX_值时,我确实得到了一个整数 据我所知,Nashorn使用乐观类型转换,因此在我看来,MIN_值仍然可以是int,不需要是double,我想问题不在于Nashorn本身,而在于您正在运行的

我在一些Javascript中传递Integer.MIN_值,它只返回输入。但是,当我使用
ScriptValueConverter.unwrapValue(returnedObject)
比较Javascript的结果时,似乎值是相同的,但类型是double,而我期望的是整数

然而,当我传入Integer.MAX_值时,我确实得到了一个整数


据我所知,Nashorn使用乐观类型转换,因此在我看来,MIN_值仍然可以是int,不需要是double,我想问题不在于Nashorn本身,而在于您正在运行的javascript代码或您正在使用的第三方转换器(
ScriptValueConverter
既不是
javax.script
也不是
jdk.nashorn
类)

我运行了以下代码:

    ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("nashorn");
    jsEngine.eval("function identity(x) {return x;}");
    System.out.println("Integer.MIN_VALUE:" + ((Invocable) jsEngine).invokeFunction("identity", Integer.MIN_VALUE).getClass());
    System.out.println("Integer.MAX_VALUE:" +((Invocable) jsEngine).invokeFunction("identity", Integer.MAX_VALUE).getClass());
输出为:

Integer.MIN_VALUE: class java.lang.Integer
Integer.MAX_VALUE: class java.lang.Integer

在这里,您可以找到关于的简要说明。

但是Nashorn不需要返回一个
整数
。也许它在一个点上单独存储值和符号,因此,不能将
整数表示为
最大值
int
,也许下一次更新会改变,谁知道呢?也许是打字错误,您指的是Integer.MIN\VALUE?我知道不需要返回整数,但这有点不寻常,不是吗,如果Nashorn使用乐观类型转换,MIN_值显然仍然可以表示为int,但Nashorn选择使用double,这与它处理MAX_值的方式不一致是的,我的意思是,
integer。MIN_值
不能表示为int“
int
magnity and sign”。有时,试图处理这两种情况的代码都会遇到此类问题。非直观的解决方案是在处理过程中将值表示为“magnity and sign的否定”。并非每个人都这样做。