Вы не изменяете, на какой объект ссылается параметр (что здесь не разрешено). Вместо этого вы изменяете состояние объекта (которое здесь разрешено).
Другими словами, когда вы передаете свой объект e1 EmployeeBean в метод, параметр x ссылается на тот же объект, на который ссылается e1, и внутри метода это не может измениться, и поэтому вы не можете сделать это:
public EmployeeBean changeFinalvalue(final EmployeeBean x) {
x = new EmployeeBean(); // changing the reference is not allowed!
return x;
}
Но то, что вы делаете - изменение состояния объекта - разрешено.
Единственный известный мне способ предотвращения подобных проблем - сделать глубокую копию объекта, переданного в качестве параметра, и работать с объектом copy / clone. Вы также можете сделать EmployeeBean неизменным, но тогда это не будет большой частью Боба, не так ли?
Редактировать: Я подумал, что этот вопрос должен был быть задан здесь много раз, и после небольшого поиска я обнаружил, что, конечно, так и есть. Пожалуйста, посмотрите на эти ссылки для хорошего обсуждения этого. Обратите внимание, что это общая проблема конечных переменных, будь то параметры метода или поля класса:
Java-финал-ключевое слово-для-переменных
Java-окончательный модификатор