- 締切済み
Javaでわからないものがあります
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- akira1720
- ベストアンサー率80% (128/159)
プログラムの流れを順に追っていけばわかります。 10行目で 500 という値を与えて class Foo のオブジェクトを作り、変数 f1 に代入しています。 f1 には x=500 という値が入った Foo のインスタンスが入っています。 なので 1: の結果は明らかですね。 次に、12 行目で Main の新しいオブジェクトを作って obj という変数に代入しています。今実行している Main とは別のインスタンスなので別の値を持つことができます。 13 行目では新しく作った Main の toObj メソッドを呼び出し、 10 行目で作った f1 を引数として与えています。f1 というのは x=500 が入った class Foo のオブジェクトでしたね。 では toObj の中を見てみましょう。 16 行目、引数として渡された Foo のインスタンスは f1 という名前になります。さっきの名前と同じですが、このメソッドの中でだけ通用する名前として改めて命名されています。 17 行目では、さっき渡された f1 とは別の Foo のインスタンスを作り、100 という値を渡しています。これにより、変数 f2 には x=100 という値を持った Foo のインスタンスが入ります。 18 行目では、さっき toObj に渡された f1 の X を取ってきてプリントしています。なので、 3: は 500 ですね。 19 行目では toObj の戻り値として、さっき作った f2 (xには100が入っている)を返しています。 ここで toObj の処理が終わったので toObj の呼び出し元に戻ります。 toObj を呼び出したのは 13 行目でしたね。 13行目では、toObj の戻り値を f2 という、Foo クラスのオブジェクトが入る変数に代入しています。19 行目では、toObj メソッドの中で作った f2 というオブジェクト(x=100)を戻り値として返していたので、ここでも同じ名前の f2 に x=100 を持った Foo クラスのオブジェクトが入ります。 そこで 14 行目、その f2 の getX を呼び出してプリントしているのですから、100 が表示されることになります。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
その前に「問題文」 1~3がそもそも書かれてないので、 判断できないかと。
補足
誤字がありました。実行結果が1 500 3 500 2 100なのですが、3と2の部分がどういう流れでだすのかがわからなくて。