Java对象引用问题

标签 java pointers reference

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

相关文章:

java - 为什么 Eclipse Android IDE 在使用少量后变得如此缓慢和滞后?

c - 在 C 中向内存写入和读取不同类型

java - 等式 Java 数组中的奇怪之处 : References vs. 指针

Java ArrayList : create a copy of array and use seperate from old, 但不创建新对象

c - 对函数调用的 undefined reference ?

java - 无法创建与 hsqldb 的可池连接

java - 包含库项目时出现 ClassNotFoundException(Eclipse、Android)

java - 如何通过传递对象类型将json转换为对象

在C中复制字符串数组

c++ - 在 C++ 中,引用限定符是否表达某种形式的子类型?