String有重写Object的hashCode和toString吗:
- String重写了Object的hashcode和toString方法。
如果重写equals不重写hashCode会出现什么问题:
- 首先hashCode和equals应该满足如下关系:
- 当object1.equals(object2)为true时,那么object1.hashCode()==object2.hashCode()也要为true。
- 当object1.hashCode()==object2.hashCode()为false时,object1.equals(object2)也要为false。
- 当object1.hashCode()==object2.hashCode()为true时,object1.equals(object2)可能为true,也可能为false。
- 如果重写equals不重写hashCode会出现什么问题:
- 在使用散列集合时,如HashSet,HashSet不能存储重复的元素。如果重写equals而不重写hashCode会遇到如下情况,虽然object1.equals(object2),但object1.hashCode()==object2.hashCode()为false,导致HashSet仍然会将这两个equals为true的元素都存入HashSet中,依据hashCode的值存到不同的位置。这样子会产生问题。