说说equals() (上)
发布日期:2021-06-30 12:33:48
浏览次数:2
分类:技术文章
本文共 2240 字,大约阅读时间需要 7 分钟。
那么,我们今天来说说equels,话不多说,上代码:
/** * @author Shusheng Shi * @since 2017/8/19 11:20 */public class Person { private String name; public Person(String name) { this.name = name; } public static void main(String[] args) { String s1 = new String("100"); String s2 = new String("100"); System.out.println(s1.equals(s2)); Integer integer = new Integer("123"); Long lon = new Long("123"); System.out.println(integer.equals(lon)); Person person1 = new Person("张三"); Person person2 = new Person("张三"); System.out.println(person1.equals(person2)); }}
执行一下,结果如下:
truefalsefalseProcess finished with exit code 0
在引用类型中:
- “==”是比较两个引用是否指向堆内存里的同一个地址(同一个对象)
- 而equals是一个普通的方法,该方法返回的结果依赖于自身的实现。
我们先看一下Person这个类,并没有equals方法呀,那为什么不报错呢?在Java中,如果一个类没有继承其它类,那么它默认继承Object这个类,打开Object这个类看一下,发现如下代码,Person这个类的equals方法就继承自这里
public boolean equals(Object obj) { return (this == obj); }
很简单,就一句代码,判断两个引用是否指向同一个对象,两个Person对象在堆内存中的表现如下图所示:
所以代码person1.equals(person2)等同于person1 == person2,当然打印出来的结果是false。我们再来看看Integer这个类, equals的实现如下:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
当代码执行到System.out.println(itr.equals(lon))时,会判断传入的lon这个对象是否是Integer类型,这里的lon是Long类型,所以打印出来的结果当然是false了。
最后是我们String的实现
public boolean equals(Object anObject) { //如果两个对象指向同一个引用,直接返回true if (this == anObject) { return true; } //1.判断传入的对象是否为String类型 //2.判断这两个字符串底层cahr数组的长度是否一致 //3.循环判断底层数组里的每一个char字符,看值是否都相等 //三个条件都满足,返回true,否则false if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
当代码执行到:System.out.println(s3.equals(s4)),由于字符串底层char数组里存的都是{‘1’,’0’,’0’}当然打印出来是true了。
转载地址:https://javaedge.blog.csdn.net/article/details/77408024 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月16日 13时10分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JAVA单元测试框架-5-timeOut测试
2019-04-30
JAVA单元测试框架-6-Enable priority
2019-04-30
JAVA单元测试框架-9-testng.xml管理依赖
2019-04-30
JAVA单元测试框架-10-断言Assert
2019-04-30
JAVA单元测试框架-12-java代码重复执行失败的测试用例
2019-04-30
JAVA单元测试框架-13-TestNG中的Listener监听
2019-04-30
JAVA单元测试框架-14-实现TestNG失败案例重跑
2019-04-30
Spring学习-4-Aop面向切面编程
2019-04-30
Spring学习-5-JdbcTemplate数据库操作
2019-04-30
Spring学习-6-Spring事务管理
2019-04-30
MyBatis 初步了解
2019-04-30
MyBatis 配置文件
2019-04-30
MyBatis的动态SQL
2019-04-30
MyBatis学习 关联映射
2019-04-30
MyBatis 一对多 多对多关联映射
2019-04-30
Spring整合MyBatis
2019-04-30
Git进阶-1-GIT下载初识Git
2019-04-30
Git进阶-2-本地配置GIt
2019-04-30