equals与”==”的区别
本文由 ImportNew - 刘志军 翻译自 Javarevisited。如需转载本文,请先参见文章末尾处的转载要求。
equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equals()是完全相同的,但是equals()可以基于业务规则的不同而重写(overridden )。另一个需要注意的不同点是“==”习惯用于原生(primitive)类型之间的比较,而equals()仅用于对象之间的比较。同时初学者奋力地想找到什么时候使用等号操作“==”,什么时候使用equals方法。这篇教程中你将将看到equals()方法和“==”操作是如果工作的、他们之间有什么不同、什么时候用“==”、什么时候使用equals()方法。
“==”等号操作是什么
“==”或等号操作在Java编程语言中是一个二元操作符,用于比较原生类型和对象。就原生类型如boolean、int、float来说,使用“==”来比较两者,这个很好掌握。但是在比较对象的时候,就会与equals()造成困惑。“==”对比两个对象基于内存引用,如果两个对象的引用完全相同(指向同一个对象)时,“==”操作将返回true,否则返回false。
什么是equals方法
equals()方法定义在Object类里面,根据具体的业务逻辑来定义该方法,用于检查两个对象的相等性。例如:两个Employees被认为是相等的如果他们有相同的empId的话,你可以在你自己的domain对象中重写equals方法用于比较哪两个对象相等。equals与hashcode是有契约的(无论什么时候你重写了equals方法,你同样要重写hashcode()方法),默认的equals方法实现是与“==”操作一样的,基于业务需求重写equals方法是最好的实践之一,同样equals与compareTo保持一致也不足为奇,以至于存储对象在Treemap或treeset集合中时,将使用compareTo方法检查相等性,行为是一致的。
==与equals方法的区别
==与equals的主要区别是:==常用于比较原生类型,而equals()方法用于检查对象的相等性。另一个不同的点是:如果==和equals()用于比较对象,当两个引用地址相同,==返回true。而equals()可以返回true或者false主要取决于重写实现。最常见的一个例子,字符串的比较,不同情况==和equals()返回不同的结果。
字符串的==和equals对比
字符串的比较是一个常见的情景,因为java.lang.String类重写了equals方法,它返回true如果两个字符串对象包含有相同的内容,但是==只有他们的引用地址相同时才返回true,下面这个例子就是通过==和equals方法分别比较两个字符串。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
StringnewString("cheap);StringnewString("cheap);//sincebooleanresultSystem.out.println("Comparing //sinceresultSystem.out.println("Comparing homeLoan//since//"=="resultSystem.out.println("Comparing Output:ComparingfalseComparingtrueComparingtrue |
==与equals在对象之间的对比
另一中情景是:当你对比两个对象时,在选择==和equals方法中很容易困惑,当你比较的两个引用指向的对象是Object的类型的时候,那么你看到的结果和==是一致的,因为默认的equals方法实现仅仅比较的内存地址。如果两个引用变量完全指向的是同一个对象的话就返回true,下面这个例子是equals和==方法操作比较的是两个对象。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
ObjectnewObject();ObjectnewObject();//resultSystem.out.println("Comparing //equalsresultSystem.out.println("Comparing //obj1=obj2;resultSystem.out.println("Comparing Output:ComparingfalseComparingfalseComparingtrue |
总结:
- 使用==比较原生类型如:boolean、int、char等等,使用equals()比较对象。
- ==返回true如果两个引用指向相同的对象,equals()的返回结果依赖于具体业务实现
- 字符串的对比使用equals()代替==操作符
以上就是关于equals方法和==操作符的区别,其主要的不同是一个是操作符一个是方法,==用于对比原生类型而equals()方法比较对象的相等性。
原文链接: Javarevisited 翻译: ImportNew.com- 刘志军
译文链接: http://www.importnew.com/6804.html
equals与”==”的区别的更多相关文章
- java equals和==的区别
大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...
- equals与==的区别
equals与==的区别. 下面是equals的源码 public boolean equals(Object anObject) { if (this == anObject) { //如果两个对象 ...
- equals和==的区别 你真的掌握了吗?
PS:最近读Java编程思想的时候发现了一些小问题.就是equals方法和==,感觉自己是真正掌握了,其实并没有.简单的记录一下. 学习内容: 1.equals 和 == 的区别 equals和== ...
- 【ASP.net】Equals 和 == 的区别
在比较Equals 和 ==的区别前.我们先来了解下相关的知识 C#数据类型 1.值类型 值类型有: 值类型包括:简单类型.结构类型.枚举类型:引用类型包括:Object 类型.类类型.接口.代表元. ...
- 【java】由equals和==的区别引出的常量池知识
equals和==的区别,百度查到的结果大都是:equals比较的是值,==比较的是引用地址. String str1 = "abc"; String str2 = "a ...
- 比较compareTo与equals及==的区别
1.compareTo: 附上:源码: public int compareTo(String anotherString) { int len1 = value.length; ...
- Java笔记——equals和==的区别
摔在这里几次,还是记下来吧. 原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html -------------- ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- equals()和hashCode()区别?
equals()和hashCode()区别? ------------------------------------------------- equals():反映的是对象或变量具体的值,即两个对 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
随机推荐
- Gaussdb: CN修复失败对openssl版本依赖问题处理
1.问题背景 GaussDB轻量化分布式集群安装完成后,进行openssh和openssl升级,现有环境openssh-8.2p1-9.p03.ky10.x86_64和openssl-1.1.1f-2 ...
- Goby漏洞发布 | CVE-2024-4879 ServiceNowUI /login.do Jelly模板注入漏洞【已复现】
漏洞名称:ServiceNowUI /login.do Jelly模板注入漏洞(CVE-2024-4879) English Name:ServiceNowUI /login.do Input Val ...
- Java在线数据导入导出Excel
利用hutool 导入导出 Excel 导入maven <dependency> <groupId>cn.hutool</groupId> <artifact ...
- 【赵渝强老师】Docker的日志
Docker的日志分两类,一类是 Docker引擎的日志:另一类是容器日志.下面我们分别进行介绍. 一.Docker引擎的日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14 ...
- 【赵渝强老师】Redis案例分析:用setbit统计活跃用户
一.需求背景 首先,我们来看一下需求:网站统计用户登录的次数,具体如下: 网站有1亿个用户,有经常登录的,也有不经常登录的 如何来记录用户的登录信息 如何查询活跃用户:比如:一周内,登录3次的 二.使 ...
- 为什么用 AWS CLI?因为我懒得点鼠标!
在这篇博客中,我们一起深入探索 AWS CLI 的世界,从零开始,逐步构建在云端的家园.将介绍 AWS CLI 的基本功能和使用场景,如何创建 IAM 用户.VPC.子网.安全组.EC2 实例等,甚至 ...
- [摘录] WebView2 与 JS 交互
https://docs.microsoft.com/zh-cn/microsoft-edge/webview2/gettingstarted/win32 步骤 5-脚本 托管应用还可以将 JavaS ...
- USB协议详解第9讲(USB描述符-HID描述符)
1.HID设备概述 USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备.这类设备包括鼠标.键盘.游戏手柄等,主要用于人与计算机进行交互.HID设备可以作 ...
- 2022年3月中国数据库排行榜:TiDB “三连降”仍霸榜首,“常胜四将军”得分集体下跌
春暖花开好时光,三月一号迎榜来.2022年3月的 中国数据库流行度排行榜 已在墨天轮社区发布,本月共有 199个 数据库参与排名,相比上月新增四个数据库.排名前十的数据库得分均有所波动,整体排名变动略 ...
- otdolist 案例
1. 渲染默认任务 2. 回车添加任务 3. 删除任务 4. 底部任务数量 5. tab栏切换 6. tab切换显示不同任务 7. 清除已完成的任务 8. 头部全选 9. 删除任务