equals方法那些事
1.Equals
很多人对equals方法的用法有些模糊,这里来为大家梳理下:
字符串中的equals方法,该方法用来判断两个字符串的内容是否相同。
例1:
String str1="Hello";
String str2="Hello";
String str3="java";
//字符串默认比较的是内容是否相同
//"=="号比较
System.out.println("str1==str2:" + (str1 == str2));//true
System.out.println("str1==str3:" + (str1 == str3));//false
//equals比较
System.out.println("str1.equals(str2):" + str1.equals(str2));//true
System.out.println("str1.equals(str3):" + str1.equals(str3));//false
从例1中我们可以看出,两个字符串之间的比较,无论用”==”号还是equals来进行,只要内容相同,结果就为True,内容不同,结果就为False;因此可以看出在字符串中,equals是用来判断两个字符串的内容是否相同.
那么在两个自定义对象之间的比较,是不是也是只要内容相同,就为True呢?我们来看代码:
例2:
//比较两个对象是否相同
Person p1 = new Person("小明", 18);
Person p2 = new Person("小明", 18);
System.out.println("p1.equals(p2):" + p1.equals(p2));//false
从例2中看,结果是False!!!这是为什么呢?
我们来分析下源码:
按住crtl+左键单击String 可以进入字符串源码中,

可以看出,String类重写了Object类的equals方法,所以能够完成内同比较功能。如果是我们自定义类的两个对象要进行比较内容是否相同,也需要进行覆盖重写Object中的equals方法


Object中的equals方法后结果为true了
//比较两个对象是否相同
Person p1 = new Person("小明", 18);
Person p2 = new Person("小明", 18);
// System.out.println("p1.equals(p2):" + p1.equals(p2));//false
System.out.println("p1.equals(p2):" + p1.equals(p2));//true
总结:
1.默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。
2.对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法,在重写的equals方法中实现逻辑。
重点:如果要用equals方法对对象的内容比较,一定要重写Object中的equals方法!!!
equals方法那些事的更多相关文章
- 重写equals方法需要知道的事
重写equals方法 相信在每个人都有过重写过java的equals的方法的经历.这篇博文就从以下几个方面说明重写equals方法的原由,与君共进步. 一 为什么要重写equals方法 首先我们了解e ...
- java中hashCode方法与equals方法的用法总结
首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重 ...
- JAVA中的各种 哈希码(HashCode) 与 equals方法在HIBERNATE的实际应用[转载]
1.什么是哈希码(HashCode) 在Java中,哈希码代表对象的特征.例如对象 Java代码 String str1 = “aa”, str1.hashCode= 3104 String str2 ...
- 关于java中的hashcode和equals方法原理
关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...
- Java中equals方法null造成空指针异常的原因及解决方案
正文 bug描述 当查找已修改的与未修改的做比较的时候,之前为null的值调用equals方法与其他值做比较的时候,会导致抛出空指针异常 知识补充 关于null,你不得不知道的几件事: 1.null是 ...
- List<T>Find方法,FindAll方法,Contains方法,Equals方法
假如传入的T是一个类, List<MessageInfos> MessageInfos = new List<MessageInfos>(); MessageInfos= Me ...
- [java] 更好的书写equals方法-汇率换算器的实现(4)
[java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]> [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...
- java中的equals()方法重写
如何java中默认的equals方法跟实际不符的话,需要重写equals方法.例如: public class TestEquals { public static void main(String[ ...
- java提高篇(十三)-----equals()方法总结
equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...
随机推荐
- UVA-11374(最短路)
题意: 机场快线有经济线和商业线,现在分别给出经济线和商业线的的路线,现在只能坐一站商业线,其他坐经济线,问从起点到终点的最短用时是多少,还有路线是怎样的; 思路: 预处理出起点到所有站的最短距离和终 ...
- C语言中的字符数组和字符串
在C语言中,没有字符串类型,但是可以通过字符数组来模拟字符串. 字符串可以在栈上,堆上,静态区和常量区进行分配. char buf[50] = "abc"; char buf[] ...
- adb 读写模式 挂载文件系统
删除需要把system挂载为读写,用到了这篇文章的这个命令: shell@android:/ # mount -o rw,remount yassf2 /system/ 完整文章转自:http:/ ...
- eclipse 切换数据库
PS:jdbc.url = 后面的路径就是连接的数据库,如果需要连接开发库(dev_cfin),则只需要将tg_cfin 换成 dev_cfin,重启后台即可.
- MongoDB 3.2复制集单节点部署(四)
MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件 ...
- poj 2420 A Star not a Tree? —— 模拟退火
题目:http://poj.org/problem?id=2420 给出 n 个点的坐标,求费马点: 上模拟退火. 代码如下: #include<iostream> #include< ...
- PHP错题误区
1,$bool = TRUE;echo gettype($bool); //这个输出类型:booleanecho is_string($bool); //这个用echo是不能输出布尔型的,只有va ...
- LeetCode: 620 Not Boring Movies(easy)
题目: X city opened a new cinema, many people would like to go to this cinema. The cinema also gives o ...
- Android之打包签名
一.什么的是打包? 打包就是根据签名和其他标识生成安装包. 二.什么是签名? 1.在android应用文件(apk)中保存的一个特别字符串 2.用来标识不同的应用开发者:开发者A,开发者B 3.一个应 ...
- shader实例(八)渲染路径RenderingPath
Unity的摄像机上支持3种RenderingPath,分别是VertexLit,Forward和Dferred Lighting,而shader中的LightMode标签Vertex,Forward ...