首頁  >  問答  >  主體

關於java集合LinkedList的實作問題

public E removeLast() {
    final Node<E> l = last;
    if (l == null)
        throw new NoSuchElementException();
    return unlinkLast(l);
}

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

过去多啦不再A梦过去多啦不再A梦2675 天前921

全部回覆(2)我來回復

  • typecho

    typecho2017-06-23 09:16:09

    看了下程式碼

        transient Node<E> last;

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-23 09:16:09

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

    回覆
    0
  • 取消回覆