Я хотел бы понять, почему ссылка, объявленная как final, не может быть объявлена как volatile. Существует аналогичный вопрос о SO [Почему переменная-член объекта не является окончательной и изменчивой в Java?
[1]: Почему переменная-член объекта не может быть как окончательной, так и изменчивой в Java?, но я не уверен, понят ли FINAL в этом ответе.
Теперь состояние конечной переменной может быть обязательно изменено после ее инициализации. Только ссылка не может быть инициализирована другим объектом.
Например, рассмотрим приведенную ниже переменную-член
final StringBuilder sb = new StringBuilder("CAT");
Теперь другой поток изменяет sb как:
sb.append("S");
Будет ли это изменение доступно для разных потоков в соответствии с моделью памяти Java, если эта переменная является энергонезависимой?
EDIT: я изменил StringBuffer на StringBuilder, чтобы некоторые люди поняли мою точку зрения.