Реплика DZone под названием " Core Java Concurrency" указывает:
После установки значения конечного поля не может быть изменено. Пометить поле ссылки объекта как final не препятствовать замене объектов, ссылающихся на это поле. Для Например, конечное поле ArrayList не может быть изменено на другое ArrayList, но объекты могут быть добавлены или удалены в экземпляре списка.
и
Завершение окончательного поля включает не только конечные поля в объекте, но и все объектов, доступных из этих конечных полей.
Я не совсем понимаю о втором утверждении. Означает ли это, что если у меня есть последнее поле в классе A типа Class B, которое, в свою очередь, имеет окончательное поле типа Integer, то окончательное замораживание поля для экземпляра класса A завершается только после окончательного замораживания поля для b.c
уже произошло?
public class A{
public final B b = new B();
}
public class B{
public final Integer c = 10;
}