scala 对象的相等

scala 对象的相等

Scala程序设计 第2版 - 原版.pdf 下载:

https://download.youkuaiyun.com/download/u014646662/10805074

1 equals方法

2 ==和!=方法

3 eq和ne方法

4 数组相等和sameElements方法

对人工智能感兴趣的同学,可以点击以下链接:

现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。

https://www.cbedai.net/u014646662

1 equals方法

先看一个例子:

package cn.com.tengen.test.obj

case class Person(firstName: String, lastName: String, age: Int)

object Person extends App{
  val p1a = Person("Dean", "Wampler", 29)
  val p1b = Person("Dean", "Wampler", 29)
  val p2 = Person("Buck", "Trends", 30)

  println(p1a equals p1b) // 输出: true
  println(p1b equals p1a)// 输出: true
  println(p1a equals p2)// 输出: false
  println(p1a equals null)// 输出: false
  // println(null equals p1a)// 抛出 java.lang.NullPointerException异常
  // println(null equals p1b)// 抛出 java.lang.NullPointerException异常


  val l1 = Nil
  val l2 = List(p1a)
  val l3 = List(p1b)
  val l4 = List(p2)

  println(l1 equals  l2)// 输出: false
  println(l3 equals l2)// 输出: true
  println(l3 equals l4)// 输出: false

}

scala中的equals 的行为类似Java 里的equals

2 ==和!=方法

package cn.com.tengen.test.obj

case class Person(firstName: String, lastName: String, age: Int)

object Person extends App{
  val p1a = Person("Dean", "Wampler", 29)
  val p1b = Person("Dean", "Wampler", 29)
  val p2 = Person("Buck", "Trends", 30)

  println(p1a == p1b) // 输出: true
  println(p1b != p1a)// 输出: false
  println(p1a == p2)// 输出: false
  println(p1a == null)// 输出: false
  println(null == p1a)// 输出: false
  println(null != p1b)// 输出: true
  println(null == null)// 输出: true

  val l1 = Nil
  val l2 = List(p1a)
  val l3 = List(p1b)
  val l4 = List(p2)

  println(l1 == l2)// 输出: false
  println(l3 == l2)// 输出: true
  println(l3 == l4)// 输出: false
}

在第一个参数不为null的时候,==和equals的结果是一样的,这一点和Java的不同

3 eq和ne方法

eq 方法用于测试引用的相等性。也就是说,如果obj1 和obj2 指向内存中的同一个位置,obj1 eq obj2 就为true。这两个方法只对AnyRef 类型有定义:

package cn.com.tengen.test.obj

case class Person(firstName: String, lastName: String, age: Int)

object Person extends App{
  val p1a = Person("Dean", "Wampler", 29)
  val p1b = Person("Dean", "Wampler", 29)
  val p2 = Person("Buck", "Trends", 30)
  val p3 = p2

  println(p1a eq p1b) // 输出: false
  println(p1b eq p1a)// 输出: false
  println(p1b eq p1a)// 输出: false
  println(p3 eq p2)// 输出: true
  println(p1a eq null)// 输出: false
  println(null eq p1a)// 输出: false
  println(null eq p1b)// 输出: false
  println(null eq null)// 输出: true

  val l1 = Nil
  val l2 = List(p1a)
  val l3 = List(p1b)
  val l4 = List(p2)

  println(l1 eq  l2)// 输出: false
  println(l3 eq l2)// 输出: false
  println(l3 eq l4)// 输出: false
}

从这个例子中我们可以看出,eq和Java中==是比较像,但又有区别

对非AnyRef 类型调用eq,则会出错

  val i1:Int = 1
  val i2:Int = 1
  val i3:Int = 3
  println(i1 eq  i2)
  println(i1 eq  i3)

package cn.com.tengen.test.obj

case class Person(firstName: String, lastName: String, age: Int)

object Person extends App{
  val p1a = Person("Dean", "Wampler", 29)
  val p1b = Person("Dean", "Wampler", 29)
  val p2 = Person("Buck", "Trends", 30)

  println(p1a ne p1b) // 输出: true
  println(p1b ne p1a)// 输出: true
  println(p1a ne p2)// 输出: true
  println(p1a ne null)// 输出: true
  println(null ne p1a)// 输出: true
  println(null ne p1b)// 输出: true
  println(null ne null)// 输出: false

  val l1 = Nil
  val l2 = List(p1a)
  val l3 = List(p1b)
  val l4 = List(p2)

  println(l1 ne l2)// 输出: true
  println(l3 ne l2)// 输出: true
  println(l3 ne l4)// 输出: true
}

4 数组相等和sameElements方法

比较两个数组,在Scala 中并不能得出我们认为的显而易见的结果:

scala> Array(1, 2) == Array(1, 2)
res1: Boolean = false

有一个简单的解决方案,就是sameElements 方法:

scala> Array(1,2) sameElements Array(1,2)
res2: Boolean = true

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值