Что значит иметь конечный входной параметр в сигнатуре метода?

Какая причина для этого:

public void processSomething(final String hello, final String two, final Car car){}

в отличие от:

public void processSomething(String hello, String two, Car car){}

Ответы

Ответ 1

Это означает, что в рамках метода вы не можете назначать новые значения параметрам.

Общей причиной для этого является возможность использования параметров внутри анонимных внутренних классов, которые могут ссылаться только на final local переменные, включая параметры.

Другая причина для этого заключается в том, что ваш стиль кодирования способствует объявлению всех локальных переменных как окончательных, если это возможно. (Лично я стараюсь рассматривать их как окончательные, но избегаю, фактически объявляя их таким образом, поскольку он добавляет рывок.)

Ответ 2

Это означает, что вы не можете изменить ссылки. Строка неизменна, но если Car изменен, вы можете изменить поля в этом Авто, вы не можете изменить его на другой автомобиль.

Ответ 3

Это означает, что ссылка на этот объект не может быть изменена внутри метода.

Ответ 4

Это означает, что вы не можете изменить ссылки, но не может остановить изменение объекта.