Я часто сталкиваюсь с методами, которые выглядят следующим образом:
public void foo(final String a, final int[] b, final Object1 c){
}
Что произойдет, если этот метод вызывается без передачи его окончательных параметров. то есть Object1, который позже изменен (поэтому не объявлен как final), может быть передан этому методу просто отлично