在甲骨文的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在纳什霍恩,这是众所周知的严格的平等规则吗?纳什霍恩中的===严格相等运算符是否有一个明确的规范,可以解释这种行为,并有望解释行为的变化?
或者这是JDK中的一个回归?
发布于 2017-04-13 16:50:59
这是JDK 1.8.0_101中的有意更改,后来在JDK-8143896中进行了记录。严格相等的处理必须是有意的,因为它是用用于将BigDecimal与整数进行比较的测试用例调用的。
在JDK发行说明中没有提到这一点,但是可以确认它是一种有意的行为改变。
https://stackoverflow.com/questions/43396745
复制相似问题