日期:2014-05-20  浏览次数:21137 次

不同对象的hashcode是否一定不一样
假设我创建了两个不同的类:User和Admin
User user1 = new User();
User user2 = new User();
user1和user2的hashcode值一定不一样吗
Admin admin1 = new Admin();
user1和admin1的hashcode值一定不一样吗

------解决方案--------------------
当然不一定,hashcode本身就是个函数,是可以重载的,你完全可以写个函数总是返回固定值。

但hashcode函数从设计要求上来说,要尽量保证:不同对象的hashcode不同。


------解决方案--------------------
补充下关于hashcode的设计目标,比如:

User user1 = new User("张三");
User user2 = new User("李四");
这种情况下应该尽量保证 user1 和 user2 的 hashcode 不一致,但是:

User user1 = new User("张三");
User user2 = new User("张三");
这种情况下应该尽量保证 user1 和 user2 的 hashcode 相同。

------解决方案--------------------
hashCode 如果不重载,肯定会不一样

如果被重载了,就看自己的需要了
------解决方案--------------------
探讨
谢谢楼上的回答 如果我不重载这个函数 结果是怎样的呢?

------解决方案--------------------
需要从本质来了解hashCode:用来得到一个位置用来存放当前对象
就算算出是相同位置也会再分配
so 一样不一样要看算法,总之不确定