Scala之eq,equals,==的区别

本文详细解析了Scala语言中eq与equals方法的功能差异,通过对比基本类型、集合类型及引用类型的实例,深入探讨了两者在判断对象相等性时的具体实现与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

  根据官方API的定义:

  • final def ==(arg0: Any): Boolean
    The expression x == that is equivalent to if (x eq null) that eq null else x.equals(that).
  • final def eq(arg0: AnyRef): Boolean
    Tests whether the argument (that) is a reference to the receiver object (this).
  • def equals(arg0: Any): Boolean
    The equality method for reference types.

二.代码测试

package big.data.analyse.scala.eq_equals

/**
  * Created by zhen on 2019/4/9.
  */
case class Bread(brand:String, price:Int)

object EqEquals {
  def main(args: Array[String]) {
    /**
      * 基本类型
      */
    val j1 = "234"
    val j2 = 234.toString
    println(j1 eq j2) // 引用
    println(j1 equals j2) //
    println(j1 == j2) // 当比较的对象为null时等价eq,否则等价equals
    println("---------------------------")
    /**
      * 集合类型
      */
    val a1 = Array("x", "y")
    val a2 = Array("x", "y")
    println(a1 equals a2)
    println(a1 eq a2)
    println(a1 == a2)
    println(a1 sameElements a2)
    val m1 = Map(1->"x", 2->"y")
    val m2 = Map(1->"x", 2->"y")
    println(m1 sameElements m2)
    val m3 = Map(1->"x", 2->"z")
    println(m1 sameElements m3)
    println("===========================")
    /**
      * 引用类型
      */
    val b1 = Bread("BreadTalk", 50)
    val b2 = Bread("BreadTalk", 50)
    println(b1 eq b2) // 引用
    println(b1 equals b2) //
    println(b1 == b2) // 当比较的对象为null时等价eq,否则等价equals
  }
}

三.结果

  

 

转载于:https://www.cnblogs.com/yszd/p/10679681.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值