07. 数据类
2022年5月11日
07. 数据类
1. 数据类的来源
数据类来源于所有类的父类:Any。 也就是说所有类都是多态的。他们拥有一些共同的行为(方法/函数),但数据类重写了一些方法
1.1 equals(any:Any) Boolean
1.1.1 普通类
equals等价于==,比对了他们的引用,是否是同一个对象。
1.1.2 数据类
比对了对象与对象属性的值,如果他们相同,那么返回true。 而不是比对引用,如需对比引用 可使用 ===
操作符
并且:如果属性在构造方法外不会被比对
1.2 hashcode():Int
哈希码值往往被某些数据结构应用于更高效的存储或获取值。
1.2.1 普通类
引用不同hashcode也不同
1.2.2 数据类
属性的值相同hashcode也相同
1.3 toString():String
1.3.1 普通类
内存地址
1.3.2 数据类
类的属性的的值的拼接
1.4 重写/生成这些方法
idea中操作 代码->生成
2. 数据类的coye方法
复制了对象的副本,在复制对象副本时,可以对val属性重新写入值
data class People(var name:String,var age:Int)
fun main(args: Array<String>) {
val people=People("赵思琦",27)
val peopleCopy = people.copy(name = "李景风")
println(peopleCopy)
}
输出:
People(name=李景风, age=27)
3. componentN方法
3.1 依次获取数据类中属性的值
val people = People("赵思琦", 27)
println(people.component1()) // 等同于people.name
println(people.component2()) // 等同于people.age
3.2 将属性值依次赋值给变量
val people = People("赵思琦", 27)
val (name)=people
val (name1,age1)=people
println(name1)
println(name)
println(age1)
4. 使用默认参数
4.1 构造函数中使用
构造函数中的参数/任何函数的参数都可以被赋初始值, 在使用时,可以根据自己的需要对属性重新赋值。
data class People(var name: String="赵思琦", var age: Int=27)
fun main(args: Array<String>) {
val people = People(name = "zzzz")
println(people)
}
4.2 普通函数中也可使用
fun show(str:String ="随便输出"){
println(str)
}
4.3 辅助构造函数
data class People(var name: String, var age: Int){
constructor(age: Int) :this("赵思琦",age)
}
fun main(args: Array<String>) {
val people = People(27)
println(people)
}
5. 数据类的使用技巧及注意事项
数据类在kotlin1.1以后可以继承其他类 , 但不能被继承。
数据类可以实现接口