gpt4 book ai didi

scala - 类和案例类中的方法 hashCode

转载 作者:行者123 更新时间:2023-12-02 15:46:39 24 4
gpt4 key购买 nike

我希望这个答案不会重复,我试着搜索了一下,我认为以前没有人问过它。

从我可以阅读的 Scala 文档中(https://docs.scala-lang.org/overviews/scala-book/case-classes.html):

...
`equals` and `hashCode` methods are generated, which let you compare objects and easily use them as keys in maps.
...

所以我有这段代码:

class Person_Regular(name: String)
case class Person_CC(name: String)

如果我打印hashCode()的结果:

println(Person_CC("a").hashCode()) 

我可以在控制台中看到:

-1531820949

这是有道理的,因为案例类默认包含方法hashCode。普通类呢?

这段代码:

println((new Person_Regular("Joe")).hashCode())

同时打印哈希码:

1018937824

所以当定义一个class时,方法hashCode也会自动生成?那么为什么 Scala 文档说 hashCode 是用案例类生成的,而常规类已经这样做了?

最佳答案

So when defining a class the method hashCode is also generated automatically?

没有。对于普通的类,它只是继承自java.lang.Object/AnyRef,而且它是基于对象的身份,而不是它的内容:

class A(name: String)
case class B(name: String)

println(A("x").hashCode != A("x").hashCode) // true: hash codes are different
println(B("x").hashCode == B("x").hashCode) // true: hash codes are the same

在第一种情况下,允许哈希码不同,因为对象在引用上不相等。

在第二种情况下,哈希码以可预测的方式从案例类的内容中派生,因此是相同的。

关于scala - 类和案例类中的方法 hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73979661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com