3 回答

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

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

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