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

Java 关于方法调用和在对象中创建新对象的问题,java,Java,我是爪哇处女。你如何阅读: (current.getPlayer() ).getID() < p.getID() ) 这是完全合法的,Player类的第一个对象似乎没有直接的对象引用,这不就是堆外垃圾收集的危险吗 我是爪哇处女。如何阅读:(current.getPlayer()).getID()

我是爪哇处女。你如何阅读:

 (current.getPlayer() ).getID() < p.getID() ) 
这是完全合法的,Player类的第一个对象似乎没有直接的对象引用,这不就是堆外垃圾收集的危险吗

我是爪哇处女。如何阅读:(current.getPlayer()).getID() 它是两个子表达式之间的关系表达式,计算结果为真或假

第一个变量是

(current.getPlayer() ).getID()
p.getID()
第二个变量是

(current.getPlayer() ).getID()
p.getID()
您将有一个编译器错误,因为有一个额外的右参数

2个方法呼叫是否同时发生

不,有三个:一个用于当前实例上的getPlayer(),第二个用于该Player实例上的getID(),第三个用于p上的getID(),我假设这是另一个Player实例

“立刻”让我想到了线程。在您的例子中,这一切都是以串行方式在单个线程上发生的

我还有一个单独的问题。如果在新对象中创建新对象,例如Playernode nd=new Playernode(new Player(p));这是完全合法的,Player类中没有直接对象引用的第一个对象p不是有垃圾从堆中收集的危险吗

传递给Player(copy)构造函数的参数是一个引用,因此它不是gc'd。如果在Playernode类中指定一个私有数据成员指向新玩家,它将指向新玩家引用。看起来您将其初始化为与p具有相同的状态,即使它不指向相同的引用

没有被gc'd的危险。

挑剔——“两个变量之间的布尔比较”。实际上,它是两个子表达式之间的关系表达式,子表达式不是变量。