样例类的方法
当我们定义一个样例类,编译器自动帮助我们实现了以下几个有用的方法:
apply方法
toString方法
equals方法
hashCode方法
copy方法
apply方法
apply方法可以让我们快速地使用类名来创建对象。
参考以下代码:
case class CasePerson(name:String, age:Int)
object CaseClassDemo {
def main(args: Array[String]): Unit = {
val lisi = CasePerson("李四", 21)
println(lisi.toString)
}
}
toString方法
toString返回样例类名称(成员变量1, 成员变量2, 成员变量3…),我们可以更方面查看样例类的成员
case class CasePerson(name:String, age:Int)
object CaseClassDemo {
def main(args: Array[String]): Unit = {
val lisi = CasePerson("李四", 21)
println(lisi.toString)
// 输出:CasePerson(李四,21)
}
}
equals方法
样例类自动实现了equals方法,可以直接使用==比较两个样例类是否相等,即所有的成员变量是否相等
示例
创建一个样例类Person,包含姓名、年龄
创建名字年龄分别为"李四", 21的两个对象
比较它们是否相等
val lisi1 = CasePerson(“李四”, 21)
val lisi2 = CasePerson(“李四”, 21)
println(lisi1 == lisi2)
// 输出:true
结果:
hashCode方法
样例类自动实现了hashCode方法,如果所有成员变量的值相同,则hash值相同,只要有一个不一样,则hash值不一样。
示例
创建名字年龄分别为"李四", 21的对象
再创建一个名字年龄分别为"李四", 22的对象
分别打印这两个对象的哈希值
val lisi1 = CasePerson(“李四”, 21)
val lisi2 = CasePerson(“李四”, 22)
println(lisi1.hashCode())
println(lisi2.hashCode())
结果:
copy方法
样例类实现了copy方法,可以快速创建一个相同的实例对象,可以使用带名参数指定给成员进行重新赋值
示例
创建名字年龄分别为"李四", 21的对象
通过copy拷贝,名字为"王五"的对象
val lisi1 = CasePerson(“李四”, 21)
val wangwu = lisi1.copy(name=“王五”)
println(wangwu)
结果: