hashCode和identityHashCode的区别

I、 hashCode()方法是Object类下面的一个方法,供继承类重写,根据对象内存地址计算哈希值,

    String类重写了hashCode方法,并改为根据字符序列来计算哈希值

III、identityHashCode()方法是System类中的静态方法,根据对象内存地址来计算哈希值;

方法示例:

public static void main(String[] args)

     {

         //下面程序中s1和s2是两个不同对象

         String s1 = newString("Hello");

         String s2 =newString("Hello");    

        //String类重写了Object类的hashCode方法——改为根据字符序列计算hashCode值,

        //因为s1和s2的字符序列相同,所以它们的hashCode方法返回值相同

         System.out.println(s1.hashCode() +"----" + s2.hashCode());      

 

        //s1和s2是不同的字符串对象,所以它们的identityHashCode值不同,

       //identityHashCode是根据对象的地址计算得到的,所以任何两个不同的对象的           

        //identityHashCode值总是不相等

        System.out.println(System.identityHashCode(s1)+ "----" 

                            +System.identityHashCode(s2));

 

        //s3和s4是相同的字符串对象,所以它们的identityHashCode值相同

        String s3 ="Java";

        String s4 ="Java";

       System.out.println(System.identityHashCode(s3)+"----" 

                           +System.identityHashCode(s4));}

输出:

69609650----69609650

13078969----3154093

28399250----28399250

时间: 2024-10-03 23:40:18

hashCode和identityHashCode的区别的相关文章

hashCode和identityHashCode 的关系

1:首先看一下JDk API的观点 1-1:hashCode方法相关 1-2:identityHashCode()方法相关 2:此例的核心程序,对应的观点在注释中已经有所说明,请自己也动手实验一下看看! import static java.lang.System.out; /** * 一个对象的hashCode和identityHashCode 的关系: * 1:对象的hashCode,一般是通过将该对象的内部地址转换成一个整数来实现的 * 2:当一个类没有重写Object类的hashCode

java中的hashcode和euqals的区别和联系

一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象). 2 .要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等. 没有覆盖equals方法代码如下: [java] view plaincopy //学生类 public class S

java中hashcode和equals的区别和联系

HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.HashMap中相同键的呢?当存储了“相同的东西”之后Java运行时环境又将如何来维护呢? 在研究这个问题之前,首先说明一下JDK对equals(Object obj)和hashcode()这两个方法的定义和规范: 在Java中任何一个对象都具备equals(Object obj)和hashcode()

hashCode和equals的区别

关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?equals和hashCode都是Object对象中的非final方法,它们设计的目的就是被用来覆盖(override)的,所以在程序设计中还是经常需要处理这两个方法.下面我们一起来看一下,它们到底有什么区别,总结一波! 01.hashCode介绍 hashCode() 的作用是获取

hashCode与equals的区别与联系

1.equals方法用于比较对象的内容是否相等(覆盖以后) 2.hashcode方法只有在集合中用到 3.当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等). 4.将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中.如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接

!!转!!hashCode与equals的区别与联系

这篇文章写得很好!!! 原文链接:http://blog.csdn.net/afgasdg/article/details/6889383 一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象). 2 .要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来

hashcode()和equals()的区别

Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方法,都可以被重写(overwrite). 本文介绍了2种方法在使用和重写时,一些需要注意的问题. 一.equal()方法 Object类中equals()方法实现如下: 1 2 3 public boolean equals(Object obj) {     return (this == obj);

"==" equals和hashCode的联系和区别

写这篇文章的目的是自己彻底把三者搞清楚,也希望对你有所帮助. 1."=="运算符对与基本类型(int long float double boolean byte char short),比较的是他们的值.但是对于复合数据类型,比较的是他们的内存地址. public class TestString { public static void main(String[] args){ String s1="Hello"; String s2="Hello&q

java-se-面试(1)-字符串

http://blog.csdn.net/zhangerqing/article/details/8093919 hashCode和identityHashCode的区别 I. hashCode()方法是Object类下面的一个方法,供继承类重写,根据对象内存地址计算哈希值,String类重写了hashCode方法,并改为根据字符序列来计算哈希值 II.identityHashCode()方法是System类中的静态方法,根据对象内存地址来计算哈希值: 方法示例: public static v