s-day02-对象的哈希值

This commit is contained in:
2026-08-02 10:49:28 +08:00
parent 70a8eda130
commit b7470d5c07
3 changed files with 55 additions and 0 deletions
@@ -0,0 +1,25 @@
package com.inmind.set02;
/*
1.什么是哈希值??
哈希值就是一个对象的特征码,使用一个十进制int值来表示的.int的值是有限的,但是对象是无限的(不同的对象的哈希值可能相同)
2.如何获取一个对象的哈希值呢??
Object类中有一个方法hashCode方法可以获取
Object类的hashCode的源码:
public native int hashCode();//通过真正的地址值使用哈希算法返回的一个int值
3.我们发现每个对象的哈希值默认是通过地址来获取,这样没有意义.我们在实际开发中
希望拥有相同内容的同一类对象的哈希值的一致.所以子类重写hashcode.我们可以模拟一个
已经重写过hashcode,并且经常使用的类.得出一个结论,String的哈希值跟它的内容有关,那么
自定义类重写hashcode那么也应该跟类的内容(属性)有关
*/
public class HashCodeDemo08 {
public static void main(String[] args) {
Student s = new Student("张三", 18);
Student s1 = new Student("张三", 18);
int i = s.hashCode();
System.out.println(i);
System.out.println(s);
//按照我们实际开发的需求,认作是同一个对象的哈希值就应该一样!!!!
System.out.println(s1.hashCode());
}
}
@@ -33,5 +33,6 @@ public class HashSetDemo07 {
System.out.println(e); System.out.println(e);
} }
} }
} }
+29
View File
@@ -0,0 +1,29 @@
package com.inmind.set02;
import java.util.Objects;
public class Student extends Object {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
int result = Objects.hashCode(name);
result = 31 * result + age;
return result;
}
}