我认为我没有正确理解java处理对象引用的方式。这是一个问题的例子,我意识到有些东西没有像我想象的那样工作:
public void UnequipObject(int index) {
UsableItem ui = null;
if(index == 0) ui = item1;
else if(index == 1) ui = item2;
else if(index == 2) ui = item3;
if(ui != null)
{
int itemId = ui.GetId();
State.Instance().AddItem(itemId, 1);
ui = null;
}
}
该函数取消角色对象的装备(我正在开发一个视频游戏)。每个角色最多拥有三个物体。为了使其更通用,使用给定的索引,您可以取消该对象的装备。为此,我将要取消装备的对象复制到 ui 中以对其进行更改。国家在这里并不重要。关键是,当我执行“ui = null”的分配时,假设原始对象也将为 null,因为我认为在将对象分配给 ui 的那一刻,两者都是相同的引用,您可以编辑两者中的任何一个,更改将同时影响两者...
有人可以帮我解决这个误解吗?谢谢!
最佳答案
ui
是一个局部变量。您只需将this变量设置为null
。您不会影响代码中的任何其他变量。稍后您可以指定 ui
来引用其他项目之一并对其执行某些操作。
顺便说一句,我强烈建议您使用数组或列表。这将使检索项目变得更容易(一行,而不是一堆 if..else if..else)。如果您将来决定这样做,还可以更轻松地向库存中添加更多“插槽”。
关于Java对象引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317467/