私は持っています
SomeClass sc1 = new SomeClass();
SomeClass sc2 = sc1;
sc1によってsc2は変更されますか(sc1が変更された場合)?そうでない場合、それを行う方法は?
私は持っています
SomeClass sc1 = new SomeClass();
SomeClass sc2 = sc1;
sc1によってsc2は変更されますか(sc1が変更された場合)?そうでない場合、それを行う方法は?
はい、変更は両方とも同じオブジェクトを指すものとしてsc1
反映されます。sc2
つまり、これがSomeClass
public SomeClass {
String name;
//getter setter
}
あなたがこれをするなら
SomeClass sc1 = new SomeClass();
SomeClass sc2 = sc1;
sc1.setName("Hello");
System.out.println(sc2.getName()); // this will print hello since both sc1 and sc2 are pointing to the same object.
しかし、これを行う場合:
sc1.setName("Hello");
sc1 = null;
System.out.println(sc2.getName()); // this will print hello since only sc1 is null not sc2.
どちらも同じオブジェクトを参照しているので、そうです。
そのようなもの-sc1に追加の名前sc2を付けます。
sc2
とsc1
は別々の変数であり、両方に同じオブジェクトへの参照が含まれています(これは重要な違いです!)。オブジェクトの状態への変更は、両方の参照を通じて等しく表示されます。それで
sc2.setField("hi!");
sc1.getField(); // returns "hi!"
ただし、参照自体を変更しても、他の参照には影響しません。
sc2 = null;
sc1.getField(); // still returns "hi!", no exception