我认为我不能正确理解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"进行分配时,假设原始对象也是空的,因为我认为在将对象分配给ui的那一刻,两者都是相同的参考,你可以编辑任何两个变化将同时影响...
有人能帮助我解决这个问题吗?谢谢!
答案 0 :(得分:1)
ui
是一个局部变量。您只是将此变量设置为null
。您不会影响代码中的任何其他变量。稍后您指定ui
来引用其他项目之一并对其执行某些操作。
另外,我强烈建议您使用数组或列表。这样可以更容易地检索项目(一行,而不是一堆if..else if..else)。如果您决定在将来这样做,它还可以更容易地为库存添加更多“插槽”。
答案 1 :(得分:0)
您无法将对象设置为null。是的,您将ui
设置为null
,但ui只是对象的一个引用(可能有其他引用原始对象)。对象本身不受此影响。
只有在没有对原始对象的引用时,才会进行垃圾回收。