關於java集合LinkedList的實作問題
过去多啦不再A梦
过去多啦不再A梦 2017-06-23 09:14:09
0
2
956
public E removeLast() {
    final Node<E> l = last;
    if (l == null)
        throw new NoSuchElementException();
    return unlinkLast(l);
}

last為成員變量,為什麼不直接在方法裡使用,而是賦值給一個final的局部變數?

过去多啦不再A梦
过去多啦不再A梦

全部回覆(2)
typecho

看了下程式碼

    transient Node<E> last;

last 是 transient 的吧
如果把他賦值給一個局部 final 變數就
不需要每次使用 last 都 check value 了吧

巴扎黑

部分原因是這樣做能確保線程安全。假設這個方法不用 l 變數而是直接引用 last 成員,那麼判斷就變成了 if(this.last == null)。如果透過判斷之後的瞬間,last 被賦值成了 null,那麼下一句 unlinkLast(this.last) 就會出現未知的結果。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板