作为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