3 回答

TA貢獻1993條經(jīng)驗 獲得超6個贊
我認為你可能是對的,它們是等價的(或者看起來確實是這樣)
在這兩種情況下,如果要刪除的項目是列表中的最后一項(例如,如果 next 為 null,則 next.next 是錯誤),則看起來會出現(xiàn)空指針異常(在 next.next 上)。
如果你通過了 null,當然這也將成為 NPE。

TA貢獻1839條經(jīng)驗 獲得超15個贊
在第一個方法(第 2 行)中創(chuàng)建節(jié)點“next”是不必要的代碼行。
兩個片段都達到相同的結(jié)果。
但是額外的變量賦值(它不會“創(chuàng)建節(jié)點”,它只是為現(xiàn)有節(jié)點分配一個新名稱)所做的是避免調(diào)用middle.next
兩次,避免兩次執(zhí)行相同的“計算”。
在此示例中,這不會產(chǎn)生任何真正的區(qū)別,但一般來說,它可以是一種常見的性能優(yōu)化,以避免冗余工作(特別是如果涉及執(zhí)行一些“繁重工作”的方法調(diào)用)。不過,在進行這些冒險之前,應(yīng)該考慮是否值得讓代碼變得不太易讀,特別是考慮到 JVM 將嘗試自動進行各種優(yōu)化。因此,僅將這種心態(tài)應(yīng)用于簡單的模式或真正的瓶頸。
最重要的是,為中間結(jié)果命名也可以產(chǎn)生更多不言自明的代碼(這里也沒有太大區(qū)別)。
最后的評論:有時(但不是這里)有必要引入額外的變量來臨時存儲一些東西,否則這些東西會在操作過程中被覆蓋,例如著名的int h = x; x = y; y = h;
例子。

TA貢獻1860條經(jīng)驗 獲得超8個贊
是的,它們是等價的。我更喜歡第一個,因為它避免了表達式的重復middle.next
。
正如@Rick 指出的,當middle
是最后一個元素時,在這兩種情況下你都會得到一個 NPE。
添加回答
舉報