With immutable objects, every step in the fluent chain of calls is an independent fork of the full object state. There's no need to use java clone(); each method calls a private constructor that passes the object state (slightly altered, of course).
java.lang.String works exactly this way. You're already used to the pattern.
java.lang.String works exactly this way. You're already used to the pattern.