public E removeLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return unlinkLast(l);
}
last est une variable membre. Pourquoi ne pas l'utiliser directement dans la méthode au lieu de l'attribuer à une variable locale finale ?
J'ai regardé le code
last est transitoire, n'est-ce pas ? Si vous l'attribuez à une variable finale locale, vous n'avez pas besoin de vérifier la valeur à chaque fois que vous utilisez last, n'est-ce pas ?
Une partie de la raison est de garantir la sécurité des fils. En supposant que cette méthode n'utilise pas la variable l mais fait directement référence au dernier membre, alors le jugement devient
if(this.last == null)
。如果通过判断之后的瞬间,last 被赋值成了 null,那么下一句unlinkLast(this.last)
et des résultats inconnus se produiront.