Nashorn:比较BigDecimal和数字的严格平等

时间:2017-04-13 15:52:41

标签: javascript java nashorn

在Oracle的JDK 1.8.0_121中,在Nashorn(嵌入在JDK中的JavaScript引擎)中,new BigDecimal(1.0) === 1falsenew BigDecimal(1.0) == 1true

使用JDK 1.8.0_121的jjs(Nashorn REPL):

jjs> var BigDecimal = Java.type("java.math.BigDecimal")
jjs> var bd = new BigDecimal(1.0)
jjs> bd
1
jjs> bd === 1.0
false
jjs> bd == 1.0
true

使用JDK 1.8.0_74的jjs

jjs> var BigDecimal = Java.type("java.math.BigDecimal")
jjs> var bd = new BigDecimal(1.0)
jjs> bd
1
jjs> bd === 1.0
true
jjs> bd == 1.0
true

这是Nashorn平等严格的严格规则吗?在Nashorn中是否有明确的===严格相等运算符规范可以解释这种行为,并希望行为发生变化?

或者这是JDK中的回归吗?

1 个答案:

答案 0 :(得分:1)

这是JDK 1.8.0_101及更高版本中的有意更改,记录在JDK-8143896中。严格平等的处理必须是有意的,因为它是用test case that covers BigDecimal being compared to an integer调用的。

这在JDK发行说明中没有被提及,但它可以被确认为行为的故意改变。

相关问题