博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala中==,eq与equals的区别
阅读量:6176 次
发布时间:2019-06-21

本文共 2231 字,大约阅读时间需要 7 分钟。

根据的定义:

  • 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.

简言之,equals方法是检查是否相等,而eq方法检查的是引用是否相等。所以如果比较的对象是null那么==调用的是eq,不是null的情况调用的是equals。

看一个简单的例子:
在java中如果要对两个对象进行值比较,那么必须要实现equals 和hashCode方法。而在scala中为开发者提供了case class,默认实现了equals 和hashCode方法。

scala> case class Bread(brand:String, price:Int)defined class Breadscala> val b1 = Bread("BreadTalk", 50)b1: Bread = Bread(BreadTalk,50)scala> val b2 = Bread("BreadTalk", 60)b2: Bread = Bread(BreadTalk,60)scala> b1 eq b2res2: Boolean = falsescala> b1 equals b2res3: Boolean = true

而对于Array或者Map对象不能简单点使用equals进行比较,要通过sameElements方法,例如:

scala> val a1 = Array("x", "y")a1: Array[String] = Array(x, y)scala> val a2 = Array("x", "y")a2: Array[String] = Array(x, y)scala> a1 equals a2res4: Boolean = falsescala> a1 eq a2res5: Boolean = falsescala> a1 sameElements a2res6: Boolean = truescala> val m1 = Map(1->"x", 2->"y")m1: scala.collection.immutable.Map[Int,String] = Map(1 -> x, 2 -> y)scala> val m2 = Map(1->"x", 2->"y")m2: scala.collection.immutable.Map[Int,String] = Map(1 -> x, 2 -> y)scala> m1 sameElements m2res7: Boolean = truescala> val m3 = Map(1->"x", 2->"z")m3: scala.collection.immutable.Map[Int,String] = Map(1 -> x, 2 -> z)scala> m1 sameElements m3res8: Boolean = false

如果Array中存的是对象,也是一样的,例如

scala> case class Bread(brand:String, price:Int)defined class Breadscala> val b1 = Bread("BreadTalk", 50)b1: Bread = Bread(BreadTalk,50)scala> val b2 = Bread("BreadTalk", 50)b2: Bread = Bread(BreadTalk,50)scala> val b3 = Bread("BreadTalk", 60)b3: Bread = Bread(BreadTalk,60)scala> val a1 = Array(b1)a1: Array[Bread] = Array(Bread(BreadTalk,50))scala> val a2 = Array(b2)a2: Array[Bread] = Array(Bread(BreadTalk,50))scala> val a3 = Array(b3)a3: Array[Bread] = Array(Bread(BreadTalk,60))scala> a1 equals a2res0: Boolean = falsescala> a1 sameElements a2res1: Boolean = truescala> a1 equals a3res2: Boolean = falsescala> a1 sameElements a3res3: Boolean = false

更多更好的文章请关注

转载于:https://www.cnblogs.com/woople/p/6839310.html

你可能感兴趣的文章
java中的抽象类和抽象方法
查看>>
人数超100的微信群非群主无法修改群名称了
查看>>
2015第11周一
查看>>
php 在web端读出pdf 与各种文件下载
查看>>
[数分提高]2014-2015-2第10教学周第1次课 (2015-05-04)
查看>>
jQuery源码——.html()方法原理解析
查看>>
grep 命令搜索 带空格的字符
查看>>
二叉树6----一层二叉树的遍历
查看>>
jQuery LigerUI系列:ligerComboBox
查看>>
百度mp3接口
查看>>
mongodb3.0 db.addUser报错
查看>>
python中使用urllib2伪造HTTP报头的2个方法
查看>>
NEURAL NETWORKS, PART 2: THE NEURON
查看>>
深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
查看>>
UVA 10635 Prince and Princess
查看>>
SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例
查看>>
Android bluetooth介绍(四): a2dp connect流程分析
查看>>
【淡墨Unity3D Shader计划】一间 创建一个游戏场景 & 第一Shader写作
查看>>
Linux命令-实时监测命令:watch
查看>>
Linux里如何查找文件内容
查看>>