关于方法调用和在对象中创建新对象的问题

时间:2010-09-19 01:45:08

标签: java

我是Java处女。你怎么读:

 (current.getPlayer() ).getID() < p.getID() ) 

是否同时发生了2个mthod呼叫?

我也有一个单独的问题。如果要在新对象(如

)中创建新对象
 Playernode nd=new Playernode(new Player(p)); 

这是完全合法的,不是Player类的第一个对象,似乎没有直接对象引用有可能从堆中垃圾回收的危险?

1 个答案:

答案 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的危险。