私はJavaを初めて使用しますが、オブジェクトの割り当てに関していくつか質問があります。例えば、
Test t1 = new Test();
Test t2 = t1;
t1.i=1;
変数がTestクラス内で定義されていると仮定すると、t1とt2の両方が、変更がとの両方に影響を与えるi
同じオブジェクトを指していると仮定するのは正しいですか?実際にテストしてみたところ、正しかったようです。ただし、同じことを試してみると、変更は一方の側でのみ発生し、もう一方の側は影響を受けません。この背後にある理由は何ですか?t1.i=1
t1
t2
String
編集:私がStringで試したケース。
String s1 = "0";
String s2 = s1;
s1 = "1";
System.out.println(s1);
System.out.println(s2);
Stringは不変であるため、Stringでケースをテストすることで自分の間違いに気づきます。文字列を変更すると思っs1="1"
たのは、実際には「1」の参照をs1に返すことです。それにもかかわらず、私の質問は残っています。t2とt1の両方が同じオブジェクトを指しているのでしょうかTest t2 = t1;
、それともそれぞれが独自のオブジェクトを持っているのでしょうか。この状況は、Java上のすべてのオブジェクトに当てはまりますか?