copyedInvoice内のアイテムを変更でき、originalInoice内のこれらのテーマには影響しないと思いました。
これは、コピーされるのが参照変数であり、それ自体のオブジェクトではないために発生します。
したがって、同じオブジェクトを指す2つの「参照」ができあがります。
オブジェクト全体をコピーする必要がある場合は、クローンを作成する必要があります。
ただし、オブジェクトが他のオブジェクトである場合にオブジェクトの内部属性を複製しないと、問題が発生する可能性があります。
たとえば、次のクラス定義では問題はありません。
public class Something {
private int x;
private int y;
private String stringObject;
}
そのコピーを作成すると、その属性の現在の値がコピーされ、それだけになります。
ただし、クラス内に別のオブジェクトがある場合は、それも複製することを検討してください。
class OtherSomething {
Something something;
private int x;
}
次の場合:
Something shared = new Something();
OtherSomething one = new OtherSomething();
OtherSomething two = new OtherSomething();
one.something = shared;
two.something = shared;
この場合、1つと2つの両方が、同じ共有「何か」への同じ参照変数を持ち、一方の値を変更すると、もう一方に影響します。
そのため、不変オブジェクトを使用する方がはるかに簡単/優れた/簡単です。
不変オブジェクトの値を変更する必要がある場合は、正しい値で新しいオブジェクトを作成するだけです。