Por que o código-fonte do JDK obtém uma cópia `final` de instâncias` voláteis`

Eu li o código fonte do JDK sobre o ConcurrentHashMap.

Mas o código a seguir me confundiu:

public boolean isEmpty() {
    final Segment<K,V>[] segments = this.segments;
    ...
}

Minha pergunta é:

"this.segments" é declarado:

final Segment<K,V>[] segments;

Então, aqui, no início do método, declarado uma referência de mesmo tipo, aponte para a mesma memória.

Por que o autor escreveu assim? Por que eles não usaram esse processo diretamente? Existe alguma razão?

questionAnswers(3)

yourAnswerToTheQuestion