Help us understand the problem. What is going on with this article?

可変オブジェクト/不変オブジェクト

初学者ですが、個人的な勉強のためまとめました

可変オブジェクト/不変オブジェクト

・オブジェクトに一度セットしたフィールドの値を、後から変更できるオブジェクトを可変(mutable)オブジェクト、変更できないオブジェクトを不変オブジェクト(immutable)という

java.lang.Stringクラスjava.io.Fileクラスのインスタンスは不変オブジェクトの代表例であり、
値を後から変更することはできない
新しい値を扱いたい場合は新しいインスタンスを作るしかないが、「変数の値(オブジェクトに対する参照)を変更」するのであって、「オブジェクトの状態を変更」するわけではないで、そこの違いをしっかり理解すべし

・不変なオブジェクトを定義するには以下のようにする
 ①オブジェクトの内部状態を変更可能なメソッドを提供しない(setterメソッドなど)
 ②クラスをfinalで宣言し、どのメソッドもオーバーライドされないことを保証する(サブクラスからの状態の変更を防ぐ)
 ③全てのフィールドを"private final"で定義する("final"の指定は必須ではないが、より明示的に不変クラスであることを宣言できる)
 ④内部に可変オブジェクトを保持している場合、そのオブジェクトを外部に提供しない。(getterメソッドなど)また、該当可変オブジェクトの値を内部的に変更しない

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away