Java 从其哈希代码中检索对象。

Java 从其哈希代码中检索对象。,java,tostring,Java,Tostring,如果没有重载,我可以通过toString获取对象的引用,例如“com.app”。MyObject@234d80". 但是,如果我只有字符串,是否还有其他方法来获取对象。它安全吗?不安全。即使存在通过某个键返回对象的全局映射,hashCode也不会用作该键,因为两个不同的对象可以具有相同的hashCode 标识哈希代码是通过将对象的地址转换为整数(int)生成的。由于地址的数量可以大于可能的整数的数量,因此无法绝对保证两个不同的对象将具有不同的标识哈希代码 发件人: 只要合理实用,类Object定

如果没有重载,我可以通过toString获取对象的引用,例如“com.app”。MyObject@234d80". 但是,如果我只有字符串,是否还有其他方法来获取对象。它安全吗?

不安全。即使存在通过某个键返回对象的全局映射,
hashCode
也不会用作该键,因为两个不同的对象可以具有相同的
hashCode

标识哈希代码是通过将对象的地址转换为整数(
int
)生成的。由于地址的数量可以大于可能的整数的数量,因此无法绝对保证两个不同的对象将具有不同的标识哈希代码

发件人:

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


(强调我的)

我只是想澄清一下,我以前也听说过,“两个不同的对象可以有相同的hashCode…”。但我也读过散列码是不同对象的唯一整数。你说的是分布式系统,还是一台机器上两个不同jvm生成的哈希代码?哈希代码绝对不是唯一的。越独特越好,但它不可能是独一无二的。想想弦。它们的数量是无限的,对吗?(例如
“a”
“aa”
“aaa”
…)。但是哈希代码只能有2^32个不同的值。这意味着您必须将无限数量的字符串映射到有限数量的值,因此您必须让冲突(即非唯一散列)读取该值。总之,不相等的对象可以具有相同的哈希代码。Hashcode返回一个整数。可以寻址的唯一对象肯定比唯一整数值多。@user2900314 hashCode不是唯一的。从Javadoc-
中可以看出,如果根据equals(java.lang.Object)方法,两个对象不相等,那么对这两个对象中的每一个调用hashCode方法都必须产生不同的整数结果,这是不需要的。但是,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。
@user2900314忘记
hashCode()
和javadoc以及Java的所有功能—哈希和哈希代码是一个普遍的概念,适用于所有编程(甚至在编程之外)。如果你学会了,你就会更好地理解自己在做什么。