Java:更改对象值而不更改所有引用

时间:2014-03-12 14:08:29

标签: java object reference a-star

这可能是一个noob问题,但我只是没有得到它。

我正在尝试在游戏中实现A *寻路。我正在关注this tutorialAstarPathfinder.java中的代码。但是,不是实例化AStarPathfinder类并为所有Nodes创建一个2D数组,而是使用静态方法,我通过我的2D数组(Level / World),开始和结束节点。 因此我总是要将当前和下一个Node存储在Node nextNode current中。然后我将它们添加到打开或关闭列表(取决于它们所属的位置)并使用其setter方法更改Node的x和y值(位置),以获得下一个节点。

经过几分钟的调试后,我注意到这个(ofc)也改变了openListclosedList内部节点的值。为了防止这种情况,我可以简单地调用next = new Node(int x, int y)而不是仅设置值,但是当我的Pathfinding运行每一个渲染循环时,它会搞乱垃圾收集并耗费大量性能。所以我正在寻找一个Node变量的可能性,我可以使用默认构造函数实例化一次,然后更改其值而不更改列表中的值。

这有可能吗?

2 个答案:

答案 0 :(得分:1)

您正在寻找的是不可能的。您只有一个Node对象的实例,并在多个位置指向该对象。您需要创建新的Node实例。

  

它会搞乱垃圾收集并耗费大量性能

如果您尚未进行性能测试并证明这是一个不可接受的瓶颈,那么您不应该这样做。

答案 1 :(得分:1)

虽然这不是您问题的直接答案,但希望它能帮助您做出正确的决定

JVM非常善于重用对象,您通常不应该害怕使用 new 关键字。

有关详细阅读,请参阅should-we-avoid-object-creation-in-java