定数になるような型ならメンバ変数をfinalにしてイミュータブル(不変)なクラス設計とするのがベストプラクティス
値を変えたくなったら別のオブジェクトをコピーして返す
Stringクラスと同じ考え方
最近のJavaで導入されたrecord型もそういう発想で不変しか用意されてない
オブジェクトが増えるので性能が気になるかもしれないけど有意差にならないことも多い
可変にするとキャッシュも定数化もできないから性能面でのデメリットもある
どうしても可変な値がないと処理効率が悪すぎて性能目標がクリアできなくなるほどの処理があるなら、StringBuilderのような可変クラスを別で用意してもいい
可変と不変のクラス間でCharSequenceのような読み取り専用のビューを用意するとなお良い
メンバ数が多すぎてコピーがしんどいなら定数になるべき部分だけを切り出して不変にしてメンバで持たせる