※ ChatGPTを利用し、要約された質問です(原文:ネストしたメソッドにおける変数のスコープ)
ネストしたメソッドでの変数のスコープについて
このQ&Aのポイント
ネストしたメソッドにおける変数のスコープについて調べましたが、返り値が反映されない問題があります。
変数に代入するとうまく動作するようですが、原因はスコープにありますか?
コメントアウトしているif文の中をi = nest(i); にすると、想定通りの結果が得られます。
mainからnestというメソッドを呼び出し数を数えて出力するという単純なプログラムなのですが、返り値が反映されません。変数に代入すると、うまくいくのですが、スコープが原因なのでしょうか?検索しても仕組みが分かりませんでした。
System.out.println("nest: " + nest(0));
static int nest(int i){
i++;
System.out.println("i: " + i);
if(i<5) { nest(i); } // i = nest(i); // works ?
return i;
}
出力:
i: 1
i: 2
i: 3
i: 4
i: 5
nest: 1
コメントアウトしているif文の中をi = nest(i); にすると、nest:5になります。
補足
javaで再帰される毎に別のメモリ空間が使われていたことは知りませんでした。スクリプト言語では気にしていなかったのですが、C言語に近い挙動なんですね!