java silverの資格の勉強をしている者です。
参考書の問題に以下がありました。
public class Test{ public static void main (String[] args) { Test ojb1 = new Test(); Test ojb2 = new Test(); System.out.print(ojb1 == ojb2); ojb2 = operate(ojb1, ojb2); System.out.print(" " + (ojb1 == ojb2)); } static Test operate(Test ojb1, Test ojb2) { Test ojb3 = ojb1; ojb1 = ojb2; return ojb3; } }
コンパイル、実行した結果として正しいものは次のどれですか。1つ選択してください。
A, false false
B, true true
C, false true
D, true false
E, コンパイルエラー
私のイメージだと正解は「A, false false」になると思っていましたが、正解は「C, false true」でした。
operateメソッド内で引数ojb1に対して代入されていますが、参照型のためこの代入はmainメソッド内のojb1に対しても有効だと考えていました。しかし、実際にローカル環境でobj変数を確認してみてもmainメソッド内とoperateメソッド内では別物として扱われているようです。なぜこのような結果になるのでしょうか。
ご回答いただけると幸いです。よろしくお願いいたします。
