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?