【问题标题】:Java 8/Javascript (Nashorn) long interoperatiblityJava 8/Javascript (Nashorn) 长互操作性
【发布时间】:2016-12-22 10:43:06
【问题描述】:

在 Java 8 (Nashorn) 中执行的以下 Javascript 代码未按预期运行:

if( a != b )
{
  do_sth();
}

a 和 b 是来自 Java 对象的长值(例如,1023948、1023949)。例如,当 a = 1023949 且 b = 1023949 时,a != b 为真。

请注意,以下代码可以正常工作:

if( (a+0) != (b+0) )
{
  do_sth();
}

我知道长精度问题(因为 Javascript 数字是 64 个双精度数),但我期待“小”长值应该可以工作。

感谢任何输入。谢谢。

【问题讨论】:

  • 我可能遗漏了一些东西,但是当ab 是具有相同long 值的Long 对象时,您希望a == b 为真?我不知道 Nashorn 在这里做什么,但如果在这种情况下 a != b 那么它可能是正在应用的 Java 逻辑,即 new Long(12345) != new Long(12345) (这些是相等的但不是相同的实例)。
  • 您可能是对的,因为值 -128:127 不会出现问题。看起来使用了自动装箱...

标签: javascript java nashorn


【解决方案1】:

我猜 Nashorn 将长值作为 JS 对象 传递给 JS 端,因此即使值相同,比较也会返回错误。

您可以在 JS 端检查 typeof ab

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2010-09-21
    相关资源
    最近更新 更多