2017-04-13 185 views
1

比較的BigDecimal在Oracle的JDK 1.8.0_121完全平等,內犀牛(嵌入在JDK中的JavaScript引擎),new BigDecimal(1.0) === 1false,並且new BigDecimal(1.0) == 1true犀牛:用數字

使用JDK 1.8.0_121的jjs(犀牛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平等的嚴格規定的收緊嗎?是否有納什恩的嚴格平等運算符的明確規範可以解釋這種行爲並希望行爲發生變化?

或者這是JDK中的一種迴歸?

+1

看起來更像是一個bug *修復*給我。一個對象實例永遠不應該是一個數字的'==='。 – Pointy

+0

是的,它可能是一個錯誤修復,但我無法在任何發行說明中找到它的參考。我的假設是,先前的行爲是允許任何'java.lang.Number'的子類成爲'==='給一個數字(包括BigDecimal),但是關於Nashorn的「正確」的東西有一點寶貴的細節。 –

+1

注意在普通的JavaScript中,'new Number(1)=== 1'是'false'。 – Pointy

回答