作爲Ordered
trait
的要求,斯卡拉的BigDecimal
類上的equals
方法與排序一致。但是,散列碼僅取自包裝的java.math.BigDecimal
,因此與等號不一致。Scala的BigDecimal是否違反了equals/hashCode合約?
object DecTest {
def main(args: Array[String]) {
val d1 = BigDecimal("2")
val d2 = BigDecimal("2.00")
println(d1 == d2) //prints true
println(d1.hashCode == d2.hashCode) //prints false
}
}
我找不到任何引用這是一個已知的問題。我錯過了什麼嗎?
無論誰upvoting這需要去閱讀有關斯卡拉! Scala中的'=='等同於Java中的'.equals'。 **這個答案是錯誤的** – 2009-08-28 08:44:35
* @ John * - 您是否嘗試過在Scala中運行您的答案?這是不正確的! 'scala.BigDecimal'和'java.math.BigDecimal'是不同的東西 – 2009-08-28 08:45:49
* @ John * - 抱歉鯉魚:如果你關注你的鏈接,你可以看到'equals'方法落入Java的'BigDecimal.compare '方法 – 2009-08-28 08:48:24