> should we always override the equals and hashCode even if we don’t intent at that point to use the class with any Collection classes? No and I would go even further as to say you probably don't need to override them even if you **are** going to put them into a collection. The default implementations are perfectly compatible with collections as is. For lists, it's irrelevant anyway. You should override equals if *and only if* your objects have a logical identity that is independent of their physical identity. In other words, if you want to have multiple objects that represent the same entity. Integer, is a good example of this. The integer 2 is always 2 regardless of whether there are 100 instances or 1 of the Integer object with the value of 2. You must override hashcode if you've overridden equals. That's it. There are no other good reasons to modify these. As a side note, the use of equals to implement algorithms is highly overused. I would only do this if your object has a true logical identity. In most cases, whether two objects represent the same thing is highly context dependent and it's easier and better to use a property of the object explicitly and leave equals alone. There are many pitfalls to overriding equals, especially if you are using inheritance.