在Map中若键的对象的引述已经消亡,就无法访问该键对应的值了吗?为什么键是String时却可以呢

在Map中若键的对象的引用已经消亡,就无法访问该键对应的值了吗?为什么键是String时却可以呢?
书上说WeakHashMap的存在就是为了解决,键的引用消亡后对该键值对进行自动删除回收的。我自己试着建立的一个类作为键,发现确实一个键的引用消亡后,再new一个对象(该对象和消亡的对象里的域值一样)也无法访问map中的值了。可是为什么当键是String时却还是可以访问呢?
------解决思路----------------------
HashMap是用Hash算法存储的,你要找到键对应的值,实质上是用了键的HashCode。一个普通的对象即使你能保证其内容相同,但是,不一定能保证其HashCode相同,而字符串是在常量池里面的,每次得到的都是同一个对象,HashCode相同,所以,能取到原来的键值。
可以试验一下,自定义类,重写hashCode()和equals(),让它在内容相同时HashCode也相同,看看能不能用一个新的对象,引用到原来的值。