The book Effective Java and other sources provide a pretty good explanation on how and when to use the readObject() method when working with serializable Java class
readResolve is for when you may need to return an existing object, e.g. because you're checking for duplicate inputs that should be merged, or (e.g. in eventually-consistent distributed systems) because it's an update that may arrive before you're aware of any older versions.