哈希值: 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
注意:哈希值不是对象的地址值,哈希值是一个int类型的数值
如何得到对象的哈希值:Object类中的hashCode方法可以获取对象的哈希值,返回值是int类型的
xxxxxxxxxx
public int hashCode(); //返回对象的哈希码值
对象的哈希值特点: 1、同一个对象多次调用hashCode方法返回的哈希值是相同的 2、默认情况下,不同对象的哈希值是不同的。而重写hashCode方法,可以实现让不同对象的哈希值相同
哈希值的练习
xxxxxxxxxx
package 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;
}*/
}
xxxxxxxxxx
package 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());
}
}