public E removeLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return unlinkLast(l);
}
last為成員變量,為什麼不直接在方法裡使用,而是賦值給一個final的局部變數?
typecho2017-06-23 09:16:09
看了下程式碼
transient Node<E> last;
last 是 transient 的吧
如果把他賦值給一個局部 final 變數就
不需要每次使用 last 都 check value 了吧
巴扎黑2017-06-23 09:16:09
部分原因是這樣做能確保線程安全。假設這個方法不用 l 變數而是直接引用 last 成員,那麼判斷就變成了 if(this.last == null)
。如果透過判斷之後的瞬間,last 被賦值成了 null,那麼下一句 unlinkLast(this.last)
就會出現未知的結果。