hashcode包含什么,它包含对象的内存地址

时间:2013-10-21 09:20:28

标签: java

对于类CheckToString的对象,当我将对象或objectName.toString()作为参数提供给System.out.println(),即尝试打印它时,我得到如下输出:

CheckToString@19821f

这里,'@'之后的文本是hashCode,它包含的内容是什么以及覆盖hashCode()的最佳做法是什么?

5 个答案:

答案 0 :(得分:0)

  

它包含的所有内容

它包含“对象哈希码的无符号十六进制表示”,如Javadoc中所述。

  

是否包含对象的内存地址

没有。还记录在案。

  

重写hashCode()的最佳做法是什么?

Javadoc中也清楚地记录了这一点。

我建议你看看。在这里重复一遍是不合时宜的。

答案 1 :(得分:0)

这是Java文档中的内容

  

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

您会发现此链接很有用http://www.jusfortechies.com/java/core-java/hashcode.php

答案 2 :(得分:0)

按照规范,hashcode和内存位置之间没有关系。但是,对象的内存地址对于哈希码可能是一个很好的(如果不是更好)值。

hashCode的一般合约是:

  

每当在同一个对象上多次调用它时   执行Java应用程序时,hashCode方法必须始终如一   返回相同的整数,前提是equals中没有使用的信息   对象的比较被修改。不需要保留该整数   从一个应用程序的执行到另一个执行的一致性   相同的申请。如果两个对象相等则   equals(Object)方法,然后在每个上调用hashCode方法   两个对象必须产生相同的整数结果。这不是必需的   如果两个对象根据不相等而不相等   equals(java.lang.Object)方法,然后调用hashCode方法   两个对象中的每一个都必须产生不同的整数结果。   但是,程序员应该意识到产生了不同的   不等对象的整数结果可以提高性能   哈希表。

Source

答案 3 :(得分:0)

正如Javadoc所指定的那样。 hashcode只是整数转换的内部地址。

  

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

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()

答案 4 :(得分:-1)

java.lang.Object的哈希码中,它基本上返回内存地址。(32位十六进制)。

what is the best practice of overriding hashCode()?

当您开始使用集合时,您可能希望将一个对象与另一个对象匹配。您可能知道两个不同的对象不能相同,但通过覆盖hashcode()equals(),您可以进行比较。