哈希值: 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
注意:哈希值不是对象的地址值,哈希值是一个int类型的数值
如何得到对象的哈希值:Object类中的hashCode方法可以获取对象的哈希值,返回值是int类型的
xxxxxxxxxxpublic int hashCode(); //返回对象的哈希码值对象的哈希值特点: 1、同一个对象多次调用hashCode方法返回的哈希值是相同的 2、默认情况下,不同对象的哈希值是不同的。而重写hashCode方法,可以实现让不同对象的哈希值相同
哈希值的练习
xxxxxxxxxxpackage ch15;
public class a_2_1Student {
//成员变量 private String name; private int age;
//无参构造方法 public a_2_1Student() { }
//带参构造方法 public a_2_1Student(String name, int age) { this.name = name; this.age = age; }
//成员变量对应的get、set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }
//如何让不同对象的哈希值是相同的呢 /*@Override public int hashCode(){ return 0; }*/
}xxxxxxxxxxpackage ch15;
public class a_2_2测试 {
public static void main(String[] args) {
//创建学生对象 a_2_1Student s1 = new a_2_1Student("张三",18);
//通过对象调用hashCode方法 System.out.println(s1.hashCode()); System.out.println(s1.hashCode()); //注意:这里用同一个对象调用了两次hashCode方法。都输出990368553 //特点1:同一个对象多次调用hashCode方法,返回的哈希值是相同的 System.out.println("-----------------");
//-------------------------------------------------------------------------------------------------------------
//创建学生对象 a_2_1Student s2 = new a_2_1Student("张三",18);
//通过对象调用hashCode方法 System.out.println(s2.hashCode()); //特点2:当两个不同对象的成员变量值相同时,hashCode方法返回的哈希值是不相同的。即默认情况下,不同对象的哈希值是不相同的 //如何让不同对象的哈希值是相同的呢,很简单,去Student类里面重写hashCode方法,里面再return 0即可,此时会输出不同对象的哈希值都为0 //上面那行的重写已经在Student类里面写好了,不过被注释了,需要自行解开。注意return后面写0就都返回0,也可以写成其他数字 System.out.println("-----------------");
//--------------------------------------------------------------------------------------------------------------
//探究一下字符串的哈希值,会返回什么。操作:用字符串去调用hashCode方法 System.out.println("hello".hashCode()); //输出99162322 System.out.println("world".hashCode()); //输出113318802 System.out.println("java".hashCode()); //输出3254818 System.out.println("java".hashCode()); //输出3254818 //特点3:同一个对象的哈希值是相同的。注意这里的对象是字符串的形式,当然也可以是其他形式 System.out.println("-----------------");
//--------------------------------------------------------------------------------------------------------------
//再来一个特殊的例子 System.out.println("重地".hashCode()); //输出1179395 System.out.println("通话".hashCode()); //输出1179395 //特点4:为什么上面两个字符串的哈希值会相同,因为字符串重写了hashCode方法 System.out.println("-----------------");
//--------------------------------------------------------------------------------------------------------------
//拓展。分享其他几对哈希值一样的字符串。字符串的哈希值相同属于是比较少见的 System.out.println("Aa".hashCode()); System.out.println("BB".hashCode()); System.out.println("......"); System.out.println("Ba".hashCode()); System.out.println("CB".hashCode()); System.out.println("......"); System.out.println("Ca".hashCode()); System.out.println("DB".hashCode());
}}