代码之家  ›  专栏  ›  技术社区  ›  John Threepwood

“hashCode”的默认实现是什么?[副本]

  •  69
  • John Threepwood  · 技术社区  · 13 年前

    如果没有覆盖 hashCode 方法,的默认实现是什么 哈希代码 ?

    3 回复  |  直到 13 年前
        1
  •  57
  •   Ry- Vincenzo Alcamo    9 年前

    然后这个类继承 hashCode 来自其祖先之一。如果它们中没有一个覆盖它,那么 Object.hashCode 使用。

    来自 docs :

    Object类定义的hashCode方法为不同的对象返回不同的整数,这是非常实用的。(这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。)

    因此,默认实现是JVM特定的

        2
  •  16
  •   f1sh    13 年前

    默认情况下,未被覆盖的方法继承自 Object .

    如果您查看该方法的文档,返回值为“ [...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...]) “.中的方法 java.lang.Object 被声明为本机,这意味着实现由JVM提供,并且可能会根据您的运行时环境而有所不同。

    一个小例子:

    Object o1 = new Object();
    Object o2 = new Object();
    System.out.println(o1.hashCode());
    System.out.println(o2.hashCode());
    

    打印(使用我的jdk6):

    1660187542
    516992923
    

    的十六进制表示 hashCode() 值用于的默认实现 toString() 顺便说一句:跑步 System.out.println(o1) 打印类似的内容

    java.lang.Object@7a5e1077
    
        3
  •  6
  •   Community Mohan Dere    9 年前

    Object.hashcode()是一个本机方法。

    public native int hashCode();

    这意味着它是在特定于平台的代码中实现的,并作为本机方法公开。

    相同的代码将是经过编译的代码,在JDK中不可用

    existing question 可能会提供更多信息。