Wie die Ordered
trait
fordert, ist die equals
Methode auf Scala BigDecimal
Klasse mit der Bestellung übereinstimmt. Der Hashcode wird jedoch einfach aus dem eingepackten java.math.BigDecimal
übernommen und ist daher inkonsistent mit equals.Verstößt Scales BigDecimal gegen den equals/hashCode-Vertrag?
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
}
}
Ich kann keinen Hinweis auf ein bekanntes Problem finden. Fehle ich etwas?
Wer upvoting ist, muss gehen und über Scala lesen! '==' in Scala ist äquivalent zu '.equals' in Java. ** Diese Antwort ist falsch ** –
* @ John * - hast du versucht, deine Antwort in Scala zu laufen? Es ist nicht richtig! 'scala.BigDecimal' und' java.math.BigDecimal' sind verschiedene Dinge –
* @ John * - tut mir leid, Karpfen auf: Wenn Sie Ihrem Link folgen, können Sie sehen, dass die "equals" -Methode zu Java 'BigDecimal.compare fällt 'Methode –