/ / Nashorn: Стриктно равенство, сравняващо BigDecimal с номер - javascript, java, nashorn

Nashorn: Сравнително равенство, сравняващо BigDecimal с номера - javascript, java, nashorn

В JDK 1.8.0_121 на Oracle, в рамките на Nashorn (JavaScript двигателя, вграден в JDK) new BigDecimal(1.0) === 1 е false, и new BigDecimal(1.0) == 1 е true:

Използване на JDK 1.8.0_121 "s 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 "s 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 за отговор № 1

Това е умишлена промяна в JDK 1.8.0_101 и по-късно, документирана в JDK-8143896, Управлението на стриктното равенство трябва да бъде умишлено, тъй като се извиква с тестов случай, който покрива BigDecimal, който се сравнява с цяло число.

Това не се извиква в бележките за издаване на JDK, но може да бъде потвърдено като умишлена промяна в поведението.