Java8/Javascript(Nashorn)长互操作性

Java8/Javascript(Nashorn)长互操作性,javascript,java,nashorn,Javascript,Java,Nashorn,在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倍),但我希望“小”长值应该可以工作 欢迎您的任何意见。

在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倍),但我希望“小”长值应该可以工作


欢迎您的任何意见。Thx.

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


您可以在JS端使用typeofa和b进行检查。

我可能遗漏了一些内容,但是当
a
b
是具有相同
Long
值的
Long
对象时,您希望
a==b
为真?我不知道纳肖恩在这里做什么,但如果在这种情况下,
a!=b
那么可能是应用了Java逻辑,即
new Long(12345)!=new Long(12345)
(这些实例相等,但不相同)。您可能是对的,因为问题没有出现值-128:127。似乎使用了自动装箱…有关详细说明,请参阅和。