Java 基础复习实践 --- Hashcode Equals
虽然很多知识点书籍都有整理,但是记性总是不好,所以决定将一些细小容易混淆的概念,通过简单的 Demo 实践,加深复习。特此开一个坑,坚持就是胜利。
本章内容主要为了理解以下几个知识点:
- equals() 的作用是什么?
- equals() 与 “==”的区别是什么?
- hashcode() 的作用是什么?
- hashcode() 与 equals()之间有什么联系?
目录
- 目录
- equals() 的作用
- 没有覆盖 equals() 方法
- 覆盖 equals() 方法
equals() 的作用
Indicates whether some other object is “equal to” this one.
equals()是用来 判断两个对象是否相等。
equals() 定义在 JDK 的 Object.java 中。通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等。源码如下:
| public boolean equals(Object obj) { return (this == obj);} |
既然是在 Object 类中定义了该方法,就表明了 Java 所有类都实现了 equals() 方法,所以所有类都可以通过该方法去判断两个对象是否相等。
默认的 equals() 方法等同于 ”==” 方法,所以我们一般会重写 equals() 方法 —-> 两个对象的内容相等,返回 true ,否则返回 false。
所以我们可以根据是否 重写 equals() 方法将类分为两类:
1.若某个类没有覆盖 equals() 方法,当它的通过 equals() 比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==”去比较这两个对象
2.覆盖类的 equals() 方法,来让 equals() 通过其它方式比较两个对象是否相等。通常的做法是:若两个对象的内容相等,则 equals()方法返回true;否则,返回 false 。
没有覆盖 equals() 方法
| public class HashcodeAndEquals { private static <T> void out(T t) {System.out.println(t);} public static void main(String[] args) { // 实例化两个 Person 对象Person p1 = new Person("小明", 12);Person p2 = new Person("小明", 12); // 通过 equals() 比较他们是否相等out(p1.equals(p2));} private static class Person { int age;String name; public Person(String name, int age) { this.age = age; this.name = name;} public String toString() { return name + "--- age:" + age;}}} |
输出为
false
覆盖 equals() 方法
from: http://imxie.cc/2016/07/18/Review-the-Java-basic-equals-hashcode/?utm_source=tuicool&utm_medium=referral
总结
以上是生活随笔为你收集整理的Java 基础复习实践 --- Hashcode Equals的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 怎么样才算是精通 Python?
- 下一篇: Java实现 二叉搜索树算法(BST)