It is considered best practice to make mutable objects not equal unless they are the same object. This is because the object could change later. Consider the following
Set<ProcessBuilder> pbSet = new HashSet<>();
pbSet.add(x);
pbSet.add(y);
// if x and y were equal pbSet would have one element.
y.setSomething()
// should pbSet have one or two elements.
Worse than this is the opposite case where two object could be different but later made the same. This means the Set would have a duplicate object.
What is interesting is that collections are mutable but still have equals and hashCode. I think the reason this is the case is that there is no immutable collections. e.g. String override equals(), StringBuilder does not.