В Java термин окончательный относится к ссылкам, в то время как неизменный относится к объектам.Назначение модификатора final
для ссылки означает, что он не может измениться, чтобы указывать на другой объект, но сам объект может быть изменен, если он изменчив.
Например:
final ArrayList<String> arr = new ArrayList<String>();
arr.add("hello"); // OK, the object to which arr points is mutated
arr = null; // Not OK, the reference is final and cannot be reassigned to
Asв статье в Википедии упоминается, что если вы пришли из C ++, вы должны отделить концепцию const
от final
и неизменную.