我是Java處女。你如何閱讀:關於方法調用和在對象中創建新對象的問題
(current.getPlayer()).getID() < p.getID())
2方法調用是否同時發生?
我也有一個單獨的問題。如果你是一個新的對象中創建一個新的對象,如
Playernode nd=new Playernode(new Player(p));
這是完全合法的,是不是播放器類的第一個對象,它似乎並沒有在垃圾收集危險的直接對象引用離開堆?
我是Java處女。你如何閱讀:關於方法調用和在對象中創建新對象的問題
(current.getPlayer()).getID() < p.getID())
2方法調用是否同時發生?
我也有一個單獨的問題。如果你是一個新的對象中創建一個新的對象,如
Playernode nd=new Playernode(new Player(p));
這是完全合法的,是不是播放器類的第一個對象,它似乎並沒有在垃圾收集危險的直接對象引用離開堆?
我是Java處女。你怎麼看:(current.getPlayer()).getID()< p.getID())
它的兩個子表達式之間的關係表達式,評估爲true或false。
第一個變量是
(current.getPlayer()).getID()
第二個變量是
p.getID()
您將有一個編譯器錯誤,因爲有一個額外的右括號。
2個方法調用是否同時發生?
不,有三個:一個用於當前實例上的getPlayer(),另一個用於該Player實例上的getID(),第三個用於p上的getID(),我假設它是另一個實例播放器。 「一下子」讓我思考線程化。在你的情況下,這一切都以串行方式發生在單個線程上。
我也有一個單獨的問題。如果你在一個新對象中創建一個新對象,例如Playernode nd = new Playernode(new Player(p));這是完全合法的,不是Player類的第一個對象p,它沒有直接的對象引用有堆積垃圾收集的危險?
傳遞給Player(副本)構造函數的參數是一個引用,所以它不會被gc'd。如果您將Playernode類中的私人數據成員分配爲指向新玩家,它將指向新的玩家引用。看起來像初始化它與p有相同的狀態,即使它不指向相同的引用。
沒有危險的被gc'd。
Nitpick - *「兩個變量之間的布爾比較」*。實際上,它是兩個*子表達式*之間的*關係表達式*,子表達式是*非*變量。 – 2010-09-19 02:31:52
Nitpick的確如此。 – duffymo 2010-09-19 12:06:39