0

我认为我没有正确理解 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;
    }
}

该功能 unequip 一个角色的对象(我正在开发一个视频游戏)。每个角色最多有三个对象。为了使其更通用,使用给定的索引,您取消装备该对象。为此,我在 ui 中复制了我想要取消装备以对其进行更改的对象。国家在这里并不重要。关键是,当我进行“ui = null”的赋值时,原来的对象也应该是null,因为我认为在你将对象分配给ui的那一刻,两者都是相同的引用,你可以编辑两者中的任何一个,更改将同时影响两者...

有人可以帮我解决这个误解吗?谢谢!

4

2 回答 2

1

ui是一个局部变量。您只是将此变量设置为null. 您不会影响代码中的任何其他变量。稍后,您指定ui参考其他项目之一并对其进行处理。

附带说明一下,我强烈建议您使用数组或列表。这将使检索项目更容易(一行,而不是一堆 if..else if..else's)。如果您将来决定这样做,它还将使向库存中添加更多“插槽”变得更加容易。

于 2013-03-10T00:21:35.503 回答
0

您不能将对象设置为 null。是的,您设置uinull,但 ui 只是对对象的一个​​引用(可能还有其他引用原始对象)。对象本身不受此影响。

只有没有对原始对象的引用,才会被垃圾回收。

于 2013-03-10T00:24:12.073 回答