文档章节

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

柳哥
 柳哥
发布于 2014/06/06 12:16
字数 523
阅读 79
收藏 1

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


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

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

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

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

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

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


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
    }
}


© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 206
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
面试官爱问的equals与hashCode

equals和hashCode都是Object对象中的非final方法,它们设计的目的就是被用来覆盖(override)的,所以在程序设计中还是经常需要处理这两个方法的。而掌握这两个方法的覆盖准则以及它们的区别还...

2017/12/27
0
0
equals与”==”的区别

equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equ...

YoungBoyG
2016/03/23
17
0
equals与”==”的区别

equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equ...

LCZ777
2014/03/30
0
0
理解 equals(),hashcode()和 ==

这里分别讲==和equals()的关系,以及equals()和hashcode()的关系 讲解之前,需要先明白对象的内容、对象的引用,基本类型,引用类型这几个概念,此处不做解释 一、==和equals() 两者都是比较...

Bour
2018/08/04
0
0
scala语言与java的区别

scala支持关联映射,如可以用(key -> value)表示一个键值对 scala中的所有类型都是对象,包括基本数据类型 scala中的case语句用来判断接收的消息,比java中的switch...case...更专注 receiv...

jhonephone
2014/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Quartz监听器Listerner

概述 Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。Quartz监听器主要有JobListener、TriggerListener、SchedulerListener三种,顾名思义,分别表示任务、...

大笨象会跳舞吧
5分钟前
0
0
Call exception, tries=10, retries=35, started=38348 ms ago, cancelled=false, msg=pc-node1 row

写hbase的问题,2019-01-18 23:23:28,082 | INFO | [hconnection-0x6431d54d-shared--pool2-t5] | Call exception, tries=10, retries=35, started=38348 ms ago, cancelled=false, msg=p......

stys35
8分钟前
0
0
docker 安装portainer、gogs、redis、mongodb、es、rabbitmq、mysql、jenkins、harbor

1、准备三台虚拟机ip如下 编号 Ip 1 192.168.100.101 2 192.168.100.102 3 192.168.100.103 2、镜像应用编排 192.168.100.101 主要安装系统运维相关服务 192.168.100.102 主要安装mysql、mon...

北岩
18分钟前
0
0
storm 提交任务报SocketException错误及解决办法

提交任务爆错: org.apache.storm.thrift.transport.TTransportException: java.net.SocketException: Broken pipe (Write failed) ..... Caused by: org.apache.storm.thrift.transport.TTr......

jingshishengxu
22分钟前
0
0
值得收藏:一份非常完整的MySQL规范

一、数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命...

Java干货分享
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部