Rumah > Soal Jawab > teks badan
public E removeLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return unlinkLast(l);
}
terakhir ialah pembolehubah ahli Mengapa tidak menggunakannya secara langsung dalam kaedah dan bukannya memberikannya kepada pembolehubah tempatan akhir?
typecho2017-06-23 09:16:09
Tengok kod
transient Node<E> last;
yang terakhir adalah sementara, bukan? Jika anda menetapkannya kepada pembolehubah akhir setempat, anda tidak perlu menyemak nilai setiap kali anda menggunakan yang terakhir, bukan?
巴扎黑2017-06-23 09:16:09
Sebahagian daripada sebabnya adalah untuk memastikan keselamatan benang. Dengan mengandaikan bahawa kaedah ini tidak menggunakan pembolehubah l tetapi secara langsung merujuk kepada ahli terakhir, maka penghakiman menjadi if(this.last == null)
。如果通过判断之后的瞬间,last 被赋值成了 null,那么下一句 unlinkLast(this.last)
dan keputusan yang tidak diketahui akan berlaku.