我是Java处女。你怎么读:
(current.getPlayer() ).getID() < p.getID() )
是否同时发生了2个mthod呼叫?
我也有一个单独的问题。如果要在新对象(如
)中创建新对象 Playernode nd=new Playernode(new Player(p));
这是完全合法的,不是Player类的第一个对象,似乎没有直接对象引用有可能从堆中垃圾回收的危险?
答案 0 :(得分:3)
我是Java处女。你怎么读:(current.getPlayer())。getID()&lt; p.getID())
它是两个子表达式之间的关系表达式,评估为true或false。
第一个变量是
(current.getPlayer() ).getID()
第二个变量是
p.getID()
你会遇到编译错误,因为有一个额外的权利paren。
是否同时发生了2个mthod呼叫?
不,有三个:一个用于当前实例上的getPlayer(),另一个用于该Player实例上的getID(),第三个用于p上的getID(),我假设是另一个Player实例。 / p>
“立刻”让我想到线程。在您的情况下,这是以串行方式在单个线程上发生的。
我也有一个单独的问题。如果要在新对象中创建新对象,例如Playernode nd = new Playernode(new Player(p));这是完全合法的,不是Player类的第一个对象p,没有直接对象引用有可能从堆中垃圾收集的危险吗?
您传递给Player(复制)构造函数的参数是一个引用,因此它不会被gc'd。如果您在Playernode类中指定一个私有数据成员指向新的Player,它将指向新的Player引用。看起来你将它初始化为与p具有相同的状态,即使它没有指向相同的引用。
没有gc'd的危险。