Scala之eq,equals,==的区别

一.简介

  根据官方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