It seems that many classes (e.g. `HashSet`) assume that the `hashCode` of an object will not change. The [documentation](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()) is clear about what the relationship between `equals` and `hashCode` should be. 

But is it poor design to implement a `hashCode` that changes across an object's life-time?