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 ...
随机推荐
- python中通过xlwt、xlrd和xlutils操作xls
xlwt模块用于在内存中生成一个xls/xlsx对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件; xlrd模块用于把本地xls文件加载到内存中,可以读取xls文件的表格数据,查询x ...
- AQS共享锁应用之Semaphore原理
我们调用Semaphore方法时,其实是在间接调用其内部类或AQS方法执行的.Semaphore类结构与ReetrantLock类相似,内部类Sync继承自AQS,然后其子类FairSync和NoFa ...
- poj1151 Atlantis——扫描线+线段树
题目:http://poj.org/problem?id=1151 经典的扫描线问题: 可以用线段树的每个点代表横向被矩形上下边分割开的每一格,这样将一个矩形的出现或消失化为线段树上的单点修改: 每个 ...
- weex 安装过程中遇到的坑
安装 然后 注意: 在weex-toolkit1.0.8版本后添加了npm5规范的npm-shrinkwrap.json用于锁定包依赖,故npm版本<5的用户需要通过npm i npm@late ...
- 4.js屏蔽浏览器鼠标右键菜单
document.oncontextmenu = function(){return false;} 参考链接:js 屏蔽浏览器事件汇总
- POJ - 3414 Pots BFS(著名倒水问题升级版)
Pots You are given two pots, having the volume of A and B liters respectively. The following operati ...
- MFC的CString使用
CString没有基类.一个CString对象由可变长度的一队字符组成.CString使用类似于Basic的语法提供函数和操作符.连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组 ...
- Codeforces 744C【DFS】
题意: 给你一幅图,然后有几个特殊点 和不特殊点,给你一些已经连了的边,在保证特殊点不能连的前提下,问最多还能添几条边,双向边 思路: 简单题,就是一个特殊点就是一个集合,然后搜一下,最后把还有没连的 ...
- laravel 路由设置
目录 routes\web.php 初始路由,直接渲染视图welcome,即V层 '/'为路径:www.xxx.com/ Route::get('/', function () { return ...
- Python decorate 函数
1. decorate 函数需要在 "@wrap" 之前定义, 否则会报错