虽然两个不同的对象可能具有相同的哈希码,但是,System.identityHashCode()
似乎会返回该对象的内存指针。我猜在32位JVM实现中可能没有例外,包括Sun JDK,Open JDK。虽然我没有检查源代码。在实践中,我是否可以假设与System.identityHashCode()
相同的两个对象是相同的?我可以假设两个具有相同System.identityHashCode的对象是相同的吗?
回答
简短的回答是否定的。
按照该documentation,System.identityHashCode(Object)
...
返回相同的散列码为给定的对象会被默认的方法的hashCode(返回),给定对象的类是否重写hashCode( )。
那么接下来让检查Object.hashCode()
的documentation ...
尽可能多是合理可行的,由Object类定义的hashCode方法不会返回不同的整数针对不同的对象。 (这一般是通过将该对象的内部地址转换成一个整数来实现的,但不是由在Java编程语言需要这种实现技巧。)
答案是否定的。
System.identityHashCode()只需返回Object.hashCode()。
返回相同的散列码为给定的对象会被默认的方法的hashCode(返回 ),给定对象的 类是否重写hashCode()。空引用的哈希码为零。
虽然Object.hashCode()
多达是合理可行,通过 类对象定义的hashCode方法不会返回针对不同的对象不同的整数。 (此 通常通过转换所述 对象的内部地址转换成一个整数来实现的,但是这种实现的技术是不被的JavaTM编程语言不需要 。)
然而,存在孙bug JDK指出两个对象可以返回相同的哈希码。
+1以供参考。 – Jeremy
有你的问题
首先,这是什么System.identityHashCode(Object)返回只有两件事情。
返回与默认方法hashCode()返回给定对象相同的哈希代码,无论给定对象的类是否覆盖hashCode()。空引用的哈希码为零。
二,什么是哈希码规则时比较两个对象的相等。
合同说,如果两个对象是相等的使用equals(Object)方法,就应该有相同的hashCode,但如果两个对象具有相同的哈希码,他们不一定相等。
- 1. 两个对象有相同的引用是绝对相同的?
- 2. System.identityHashCode()给不同的对象相同的值
- 3. 两个不相等的对象具有相同的散列码
- 4. 不能两个ListItem对象具有相同的值属性吗?
- 5. 两个AsyncTasks可以共享相同的SQLiteDatabase对象吗?
- 6. 两个相等的对象必须具有相同的toString输出吗?
- 7. 查看两个对象是否具有相同的类型
- 8. 具有相同哈希码的两个Java对象不一定相等吗?
- 9. 是否有可能有2个不同的NSNumber对象具有相同的值?
- 10. 我可以有多个$ _GET具有相同的密钥,不同的值吗?
- 11. 2个对象可以有相同的密钥名称吗?
- 12. 两个结构具有相同可变
- 13. 我们可以上传两个具有相同包标识符或相同名称的应用程序吗?
- 14. objective-c分配的两个对象具有相同的内存?
- 15. 具有相同相对
- 16. Android:可以将相同的位图设置为两个ImageViews吗?
- 17. 我们可以拥有两种具有相同扩展名的DSL语言吗?
- 18. 我得到两次相同的对象
- 19. 具有相同DataSource属性的两个BindingSource对象
- 20. EXTJS:两个窗口具有相同ID的对象
- 21. Erlang snmp MIB。两个mib具有相同的名称对象
- 22. 如何确认两个R对象具有相同的结构?
- 23. 比较具有相同值的非相同对象
- 24. 我可以创建与自身类型相同的对象吗?
- 25. 我可以制作具有相同签名的String + lambda表吗?
- 26. 两个具有不同合同但业务对象相同的WCF服务
- 27. bin2hex的值可以是两个不同的字符串是相同的吗?
- 28. 两个相连的表中有相同的记录具有相同的外键
- 29. 具有相同密钥的NSDictionary对象
- 30. Python:对象具有相同的值?
为什么不用'=='来比较它们,而不是*表示它们是相同的。 –
如果你喜欢编写不可移植的代码,答案是“是”:) – dasblinkenlight
我不会将应用程序逻辑基于方法的内部实现,尤其是考虑到优秀的Javadoc for Object.hashcode。 – Perception