0

私は持っています

  SomeClass sc1 = new SomeClass();
  SomeClass sc2 = sc1;

sc1によってsc2は変更されますか(sc1が変更された場合)?そうでない場合、それを行う方法は?

4

4 に答える 4

2

はい、変更は両方とも同じオブジェクトを指すものとして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.
于 2012-05-23T10:36:25.613 に答える
2

どちらも同じオブジェクトを参照しているので、そうです。

于 2012-05-23T10:36:57.640 に答える
1

そのようなもの-sc1に追加の名前sc2を付けます。

于 2012-05-23T10:45:07.933 に答える
0

sc2sc1は別々の変数であり、両方に同じオブジェクトへの参照が含まれています(これは重要な違いです!)。オブジェクトの状態への変更は、両方の参照を通じて等しく表示されます。それで

sc2.setField("hi!");
sc1.getField(); // returns "hi!"

ただし、参照自体を変更しても、他の参照には影響しません。

sc2 = null;
sc1.getField(); // still returns "hi!", no exception
于 2012-05-23T10:40:57.407 に答える