Scala对象相等性判断

在scala中,如何判断两个引用变量,是否相等的,是否指向同一个对象实例?

1、首先,我们来看下scala的AnyRef类

class AnyRef extends Any

类AnyRef是所有引用类型的根类。

具体参考:https://www.scala-lang.org/api/current/scala/AnyRef.html

AnyRef的eq方法用于检查两个变量是否指向同一个对象实例
AnyRef的equals方法默认调用eq方法实现,也就是说,默认情况下,判断两个变量相等,要求必须指向同一个对象实例

2、

  1) 如果只是根据是否指向同一个实例,来判断变量是否相等,那么直接使用==操作符即可,默认先判断是否为null,不为null,然后调用equals方法

  2) 根据field重写equals()方法,那么通常的建议的是也需要根据相同的field重写hashCode()方法,如下

  

class Apple(val name: String, val price: Double) {

    final override def equals(other: Any) = {
        val apple = other.asInstanceOf[Apple]
        if (apple == null) false
        else name == apple.name && price == apple.price
    }

    final override def hashCode = 13 * name.hashCode + 17 * price.hashCode

}

 

转载于:https://www.cnblogs.com/dreamfor123/p/9336051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值