参照型変数を”==”で比較している以下のコードを実行した際の処理結果についてご教示頂けないでしょうか。
java
1public class Test { 2 public static void main(String[] args) { 3 Test obj1 = new Test(); //①Testオブジェクト(仮にA)を生成し変数obj1が参照している 4 Test obj2 = new Test(); //②Testオブジェクト(仮にB)を生成し変数obj2が参照している 5 System.out.print(obj1 == obj2); //③各変数の参照先が異なるため"false"が返る 6 obj2 = operate(obj1, obj2); /*④operateメソッドの呼び出し 7 ⑨operateメソッドの処理結果としてobj3が返り、 8 obj2はobj3が参照しているオブジェクト(A)を参照する*/ 9 System.out.print(" " + (obj1 == obj2)); //⑩ここで"true"が返る?? 10 } 11 static Test operate(Test obj1, Test obj2){ //⑤ 12 Test obj3 = obj1; //⑥変数obj3はobj1が参照しているオブジェクト(A)を見る 13 obj1 = obj2; //⑦obj1はobj2が参照しているオブジェクト(B)を見る 14 return obj3; //⑧呼び出し元へobj3を返す 15 } 16}
【処理結果】
false true
上記コードの⑩部分によってtrueが出力されることが理解できていません。
私自身の理解としては、
・obj3…Test obj3 = obj1;
(⑥)によってTest obj1 = new Test();
で生成されたオブジェクトAを参照
・obj1…obj1 = obj2;
(⑦)によってTest obj2 = new Test();
で生成されたオブジェクトBを参照
・obj2…obj2 = operate(obj1, obj2);
およびreturn obj3;
(⑧)によってobj3と同じオブジェクトAを参照(obj2 = obj3 と同義)
となるため、⑩の(obj1 == obj2)
では、上記のとおり変数obj1の参照先(オブジェクトB)と
変数obj2の参照先(オブジェクトA)が異なるため、falseが返る。と考えたのですが異なるようなので、
なぜ⑩の(obj1 == obj2)
ではtrueが返るのか解説をお願いできますでしょうか。
初歩的な質問で申し訳ありませんが、よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー