基本类型和操作之对象相等性

探讨Java与Scala中==操作符的差异及应用
本文深入解析Java和Scala中==操作符的使用方式及其区别,通过实例展示了如何在不同场景下进行对象比较,包括基本类型、引用类型、列表和null值的比较,并详细说明了自动null检查机制。

如果想要比较一下看看两个对象是否相等,可以使用==,或它的反义 != 。如例:

115515_kRTj_168814.jpg

这些操作对所有对象都起作用,而不仅仅是基本类型。例如可以用它来比较列表:

115644_ir8b_168814.jpg

进一步,还可以用来比较不同类型的两个对象:

115856_iuTg_168814.jpg

甚至可以比较null或任何可能是null的东西不会有任何异常被抛出

120032_nS1E_168814.jpg

如上所示,==已经被仔细地加工过,因此在多数情况下都可以实现合适的相等性比较。这种比较遵循一种非常简单的规则:首先检查左侧是否为null,如果不是,调用左侧操作数的equals方法。而精确的比较取决于左操作数的equals方法定义。由于有了自动的null检查,因此不需要手动再检查一次了。注意,看下面这个例子:

120847_f7Jt_168814.jpg

好像变量确定了类型之后,再比较null的相等性,才不会报警告!!

这种比较即使发生在不同的对象之间也会产生true只要比较的两者内容相同并且equals方法是基于内容编写的。例如,以下是恰好都有五个相同字母的两个字符串的比较:

121433_9UbV_168814.jpg


Scala的==与Java的有何差别
Java里==既可以比较原始类型也可以比较引用类型。对于原始类型,java的==比较值的相等性与scala一致。而对于引用类型,Java的==比较了引用的相等性,也就是说比较的是这两个变量是否都指向JVM堆里的同一个对象。Scala也提供了这种机制,名字是:eq 。不过,eq 和它的反义词 ne,仅仅应用于可以直接映射到Java的对象,这个我们后面在讲解。可以看下示例:

object T4 {
    class A{}
    def main(args: Array[String]): Unit = {
        val a = new A
        val b = new A
        println(a == b)    //false
        println(a eq b)    //false
        println(a ne b)    //true
        println(a.eq(b))   //false
    }
}


转载于:https://my.oschina.net/fhd/blog/274883

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值