对于类CheckToString
的对象,当我将对象或objectName.toString()
作为参数提供给System.out.println()
,即尝试打印它时,我得到如下输出:
CheckToString@19821f
这里,'@'之后的文本是hashCode,它包含的内容是什么以及覆盖hashCode()的最佳做法是什么?
答案 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方法 两个对象中的每一个都必须产生不同的整数结果。 但是,程序员应该意识到产生了不同的 不等对象的整数结果可以提高性能 哈希表。
答案 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()
,您可以进行比较。