String类中的equals方法与Object类中equals方法的区别
来源:互联网 发布:51单片机流水灯原理图 编辑:程序博客网 时间:2024/05/20 06:24
今天在无意中发现一个小知识点,难度不大就是简单和大家分享一下。
String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1.equals(str2));//trueSystem.out.println(str1.hashCode());//96354System.out.println(str1.hashCode());//96354
结果为true没有什么异议,我们都知道equals比较的是两个字符串的内存地址。那么str1与str2的hashCode为什么相同呢?因为字符串的hashCode是由内容导出的,这里也就说明了str1与str2有着相同的内容(因为hashCode相同啊)。接着我们来看String类的jdk源码
public boolean equals(Object anObject) {//只要两个字符串的引用相同就返回true(这里不再赘述常量池的知识) if (this == anObject) { return true; }/*为什么会出现这一步比较呢?如果现在String str1 = new String("张三");这样一个简单的字符串和一个自己定义的Student类中的name = "张三"比较的话,它的意义就出现了,先将其强转为String类型,比较长度接着将字符串赋值给字符数组比较每一个值*/ 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; }
从源码中我们不难看出使用equals方法比较两个字符串的本质还是在使用==做比较。(源码注释是我自己加的)
Object类中的equals方法
Employee emp1 = new Employee("张三", 5000, 2005, 5 ,5);Employee emp3 = new Employee("张三", 5000, 2005, 5 ,5);System.out.println(emp3.equals(emp1));
这段代码如果我说前提条件直接问你结果,我相信会有一部分人直接回答是true(这也是我写这篇文章的目的)。
如果在Employee类中没有重写equals方法的话那么其实结果是false。我们在初学equals方法的时候都认为equals方法比较的是内容,只要内容相同就是true(最起码我一开始是这么认为的)。如果在Employee类中没有重写equals方法它调用的就会是Object类中的equals方法,我们来看jdk中的源码:
public boolean equals(Object obj) { return (this == obj); }
我看错了吗?这就是源码就这么一点,是的!现在你知道为什么直接调用Object的equals方法为什么是false的吧。这就是我们为什么要经常强调,为每一个类重写equals方法。为什么需要重写hashCode和toString方法我将在以后为大家整理。
阅读全文
0 0
- String类中的equals方法与Object类中equals方法的区别
- Java Object类中equals()方法与String类中equals()方法的比较
- Object类和String类equals方法的区别
- Java 中Object类与equals方法
- 类Object中的equals()方法
- Object 类中的 equals方法
- Object 类中的 equals方法
- Java中Object.equals与String.equals的区别
- Java中Object类的equals方法
- String类中的equals()方法
- equals方法--对象类Object中的方法
- Object类--equals方法
- (java)String 中 ==与equals方法 的区别
- Object类和String类的equals()方法对比
- Object类----equals方法与equals覆写
- 重写Object类中的Equals方法(Java)
- 重写object类中的equals方法
- object类中的equals和hashcode方法
- 两种解决表单重复提交的方式PRG和Token
- TensorFlow中CNN/卷积神经网络算法的理解
- 搭建自己的Webpack项目
- MySQL 共享锁与排他锁
- Android 网络通讯 socket tcp/ip udp http之间的关系
- String类中的equals方法与Object类中equals方法的区别
- Spring解决乱码问题
- 之江学院2017ACM 校赛Problem D: qwb与神奇的序列
- 清除浏览器缓存js文件的几种方法
- 隐因子分解机Factorization Machine
- 为什么虚拟DOM更胜一筹
- Android的四种启动方式
- phpstorm使用记录贴
- 密码存储中MD5的安全问题与替代方案