public E removeLast() { final Node<E> l = last; if (l == null) throw new NoSuchElementException(); return unlinkLast(l);}last為成員變量,為什么不直接在方法里使用,而是賦值給一個(gè)final的局部變量?
2 回答

繁星點(diǎn)點(diǎn)滴滴
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
看了下代碼
transient Node<E> last;
last 是 transient 的吧
如果把他賦值給一個(gè)局部 final 變量就
不需要每次使用 last 都 check value 了吧

慕雪6442864
TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
部分原因是這樣做能保證線程安全。假設(shè)這個(gè)方法不用 l 變量而是直接引用 last 成員,那么判斷就變成了 if(this.last == null)
。如果通過判斷之后的瞬間,last 被賦值成了 null,那么下一句 unlinkLast(this.last)
就會(huì)出現(xiàn)未知的結(jié)果。
添加回答
舉報(bào)
0/150
提交
取消