>>473
そうか? なんか 468 が final ローカル変数を C/C++ の static ローカル変数
みたいなものと勘違いしてるみたいだったから (スタックが云々のあたり)。

>>474
コピーした時点で別の変数だから final が付いてるのとは関係ないだろ。
「どちらかの値が変更されたら、見た感じ相手の変数にもその値が反映されて
そうで紛らわしいから」 って理由でこうなってるならなんとなく納得。

ちなみに

class Foo{
  void f(final x){
    new Thread(){
      public void run(){System.out.println(x);}
    }.start();
  }
}

は↓とほぼ等価。javap で見るか jad で逆コンパイルしてみれ。

class Foo{
  void f(final x){
    new Foo$1(x).start();
  }
}
class Foo$1 extends Thread{
  final int val$x;
  A$1(int x){val$x =x;}
  public void run(){System.out.println(val$x);}
}