次のような方法によく遭遇します。
public void foo(final String a, final int[] b, final Object1 c){
}
このメソッドが最終パラメータを渡さずに呼び出された場合はどうなるでしょうか。つまり、後で変更される(したがって、final として宣言されていない)Object1 は、このメソッドに問題なく渡すことができます。
ベストアンサー1
Java は、メソッドに送信する前に常にパラメータのコピーを作成します。つまり、final は呼び出しコードに何の違いも与えません。これは、メソッド内で変数を再割り当てできないということだけを意味します。
最終的なオブジェクトがある場合でも、オブジェクトの属性を変更できることに注意してください。これは、Java のオブジェクトが実際にはオブジェクトへのポインターであるためです。また、実際のオブジェクトではなく、ポインターのみがコピーされます (メソッド内では最終的なものになります)。