1 package day6.lesson1;
2
3 /*
4 1.2哈希值
5
6 哈希值简介
7 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
8 如何获取哈希值
9 Object类中的public int hashCode():返回对象的哈希码值
10 哈希值的特点
11 同一个对象多次调用hashCode()方法返回的哈希值是相同的
12 默认情况下,不同对象的哈希值是不同的。
13 而重写hashCode()方法,可以实现让不同对象的哈希值相同
14 */
15 public class HashDemo2 {
16 public static void main(String[] args) {
17 Student s1 = new Student("tom", 12);
18 System.out.println(s1.hashCode()); //1163157884
19 System.out.println(s1.hashCode()); //1163157884
20
21 Student s2 = new Student("tom", 12);
22 System.out.println(s2.hashCode()); //1956725890
23
24 System.out.println("hello".hashCode()); //99162322
25 System.out.println("hello".hashCode()); //99162322
26 System.out.println("world".hashCode()); //113318802
27
28 System.out.println("菏泽曹县".hashCode()); //1032889204
29 System.out.println("牛批666".hashCode()); //2017328440
30
31 /*System.out.println("重地".hashCode()); //1179395
32 System.out.println("通话".hashCode()); //1179395*/
33 /*
34 通过查找技术文档发现,String中的重写了hashCode方法,但是String类的hashCode算法是固定的
35 str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + … + str.charAt(n-1)
36 根据算法就可以看到是可能会存在相同hashCode的
37 */
38 }
39 }
1 package day6.lesson1;
2
3 public class Student {
4
5 private String name;
6 private int age;
7
8 public Student() {
9 }
10
11 public Student(String name, int age) {
12 this.name = name;
13 this.age = age;
14 }
15
16 public void setName(String name) {
17 this.name = name;
18 }
19
20 public void setAge(int age) {
21 this.age = age;
22 }
23
24 public String getName() {
25 return name;
26 }
27
28 public int getAge() {
29 return age;
30 }
31
32 /*@Override
33 public int hashCode() {
34 // return super.hashCode(); //默认
35 return 0; //此时可以实现让不同对象的哈希值相同
36 }*/
37 }