在Oracle的JDK 1.8.0_121中,在Nashorn(嵌入在JDK中的JavaScript引擎)中,new BigDecimal(1.0) === 1
为false
,new BigDecimal(1.0) == 1
为true
:
使用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中的回归吗?
答案 0 :(得分:1)
这是JDK 1.8.0_101及更高版本中的有意更改,记录在JDK-8143896中。严格平等的处理必须是有意的,因为它是用test case that covers BigDecimal being compared to an integer调用的。
这在JDK发行说明中没有被提及,但它可以被确认为行为的故意改变。