引数を変数に代入する理由
Cの場合はほぼ確実に、Javaでも以下のようなコードを見かけることがある。
void foo(int x, int y) { int a = x; int b = y; ... }
コードだけの話だと、この関数内ではそのまま x や y といった変数名で目的の値を参照できるのに、あえてローカル変数に入れる、ということをしている。これはなぜか。
アセンブリレベルというか、CPUレベルの動作を考えると、関数の引数は通常はヒープにあることが多い。コードの中で x や y という形で参照していると、CPU の動きは毎回ヒープへアクセスすることになる。スタックへのアクセスとヒープへのアクセスだと、ヒープへのアクセスの方が負荷が高い(らしい)ため、このオーバーヘッドを減らすために意図的にローカル変数に引数の値を代入するとよい、ということのようだ。
Cだとこの動きは理解できるが、Java だとどうなのか。Java も同じなのか、あるいはCでもそうだから、という理由で真似しているだけなのか・・・でも、
http://www.amazon.co.jp/Javaの鉄則―エキスパートのプログラミングテクニック-ピーター-ハガー/dp/489471258X
でこの内容言及されていたような記憶もある。いずれにせよ、引数に何度もアクセスするようなコードは書くなってことだな。