scala中访问控制与方法重写(2)

17 阅读1分钟

如何判断两个对象是相等的?

提问:请观察如下代码,回答问题

val stu1 = new Student("小花"18)  
val stu2 = new Student("小花"18)  
println(stu1 == stu2) // 这里会输出什么?

两个对象做比较==时,会自动调用equals方法。我们可以重写equals方法,并自己定义两个对象相等的标准。

提问:如何判断两个对象在业务上是相等的?

class Student(var name:String,var id:String,var age:Int) {
    // equals 相等
    override def equals(obj: Any): Boolean = {
        println("调用了equals..")

        println(this,obj)
        // 判断this和obj是否相等的逻辑, 姓名和学号都相等,说明这两个学生是同一个人
        val other = obj.asInstanceOf[Student]
        this.name == other.name && this.id == other.id

    }
}

def main(args: Array[String]): Unit = {
    val stu1 = new Student("小花","20230012",18)
    val stu2 = new Student("小花","20230012",18)
    val stu3 = new Student("小花","20230013",18)
    // 目标:判断他们是一个人。使用== 来输出的时候,应该要是true
    println(stu1 == stu2) // true
    println(stu1 == stu3) // false

结果

调用了equals..
(level02.basic04$Student@4c203ea1,level02.basic04$Student@27f674d)
true
调用了equals..
(level02.basic04$Student@4c203ea1,level02.basic04$Student@7c30a502)
false