gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:19:28 24 4
gpt4 key购买 nike

我是 Java 新手。你如何阅读:

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

是否同时发生了 2 个方法调用?

我还有一个单独的问题。如果您在一个新对象中创建一个新对象,例如

 Playernode nd=new Playernode(new Player(p)); 

这是完全合法的,这不是 Player 类的第一个对象,它似乎没有直接对象引用,存在堆外垃圾回收的危险吗?

最佳答案

I'm a Java virgin. How do you read: (current.getPlayer() ).getID() < p.getID() )

它是两个子表达式之间的关系表达式,计算结果为 true 或 false。

第一个变量是

(current.getPlayer() ).getID()

第二个变量是

p.getID()

你会遇到编译器错误,因为有一个额外的右括号。

Are 2 mthod calls happening at once?

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

“一次”让我想到线程。在您的情况下,这一切都以串行方式发生在单个线程上。

I also have a seperate question. If you are creating a new object within a new object such as Playernode nd=new Playernode(new Player(p)); which is perfectly legal, isn't the first object p of Player class which doesn't have a direct object reference in danger of garbage collection off the heap?

您传递给 Player(副本)构造函数的参数是一个引用,因此它不会被 gc 处理。如果在 Playernode 类中分配一个私有(private)数据成员指向新的 Player,它将指向新的 Player 引用。看起来你将它初始化为与 p 具有相同的状态,即使它没有指向相同的引用。

没有被 gc 的危险。

关于java - 关于方法调用和在对象中创建新对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com