原文链接:https://blog.csdn.net/pzllovelsy/article/details/126229288
一、什么是哈希值
哈希值就是:对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。更重要的是:这里的内存地址是JVM虚拟机虚拟出来的地址,并不是真实的物理内存地址。
在C++中的地址事真实存在的物理地址,所以相同的输出地址的代码在不同的计算机上输出的值是不一样的。这就是物理上的地址。
但是在JAVA中,一段相同的代码输出的hashCode绝对是一样的
System.out.println("hello".hashCode());//哈希码为99162322
这就说明一个问题:java里的hashCode只是逻辑上的,是我们jvm虚拟机通过特定的算法计算出来的,所以每台电脑上相同的语句的hashCode都是一样的, 这就是逻辑上的。
哈希码
在Java中,哈希码代表了对象的一种特征,例如我们判断某两个字符串是否==,如果其哈希码相等,则这两个字符串是相等的。其次,哈希码是一种数据结构的算法。常见的哈希码的算法有:
1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。
哈希值的一大作用就是:查重和去重。例如我们的Set集合就用到了hashCode来防止对象出现重复。