【发布时间】: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 个双精度数),但我期待“小”长值应该可以工作。
感谢任何输入。谢谢。
【问题讨论】:
-
我可能遗漏了一些东西,但是当
a和b是具有相同long值的Long对象时,您希望a == b为真?我不知道 Nashorn 在这里做什么,但如果在这种情况下a != b那么它可能是正在应用的 Java 逻辑,即new Long(12345) != new Long(12345)(这些是相等的但不是相同的实例)。 -
您可能是对的,因为值 -128:127 不会出现问题。看起来使用了自动装箱...
标签: javascript java nashorn