Javaの変数にはプリミティブ型と参照型の2種類がある。 一応確認しておくと プリミティブ型は byte,short,int,logn,float,double,boolean,char 参照型は それ以外 class宣言で作成される Objectクラスを継承したものはすべてである。 これらの違いは プリミティブ型は 変数用に確保されたメモリ領域に直接値が書き込まれる。 参照型は インスタンスが生成された際にメモリに領域が確保されるが、 変数用に確保された領域にはインスタンス用に確保されたメモリの アドレスが格納されている。 この違いは メソッドに渡した引数の値を書き換えてみるとわかる。 さて、問題のfinal宣言時の違いだが、 finalによって定数化されるは 変数用のメモリ領域である。 なので プリミティブ型の変数をfinalにした場合は 値を書き換えることができないが、 参照型の場合