3

我知道 Java 不允许像 C++ 那样使用指针。但是,我听说过一些关于引用的事情(大概也类似于 C++)。我的问题与以下问题有关:

我有一个类“A”,比如说,我在内存中实例化(使用新的)一堆,我希望根据我的选择将这些类“链接”到彼此。在 C++ 中,我将只有一个 A 类指针的向量(在 A 类中定义),我将指针添加到要链接到的类 AI 实例的指针。这基本上就像在内存中构建一个全向图(或单向图,取决于我如何构建我的链接)

我的问题是我可以在 Java 中以一种优雅的方式做到这一点,以及如何做到这一点?我猜这与参考有关。指针似乎是这个问题的简单解决方案,但我是 Java 新手,正在学习如何在没有指针的情况下做这些事情。我不确定如何定义参考。在 C++ 中,我会使用 A * mypointer = new A();

谢谢,

4

5 回答 5

5
import java.util.List;
import java.util.ArrayList;

class FunkyObject
{
    /** a list of other FunkyObject that this object is linked to */

    List<FunkyObject> referenceList = new ArrayList<FunkyObject>();

    /** creates a link between this object and someObject */

    public addRefrerence(FunkyObject someObject )
    {
        referenceList.add(a);
    }
}
于 2012-05-28T21:43:31.850 回答
1
public class A {

    private A[] refs;

    public A(A... refs) {
        this.refs = refs;
    }
}
于 2012-05-28T21:26:35.807 回答
0

您可以将引用视为指针,因为它们引用实例就像指针指向内存位置一样。最大的不同是 Java 不允许像 C 对指针那样对引用进行算术运算。您也不能创建对字段的引用——只能对对象进行引用,并且只能通过使用new.

至于存储对 的多个实例的引用A,您有很多选择。您可以使用List诸如此类ArrayList或任何其他Collection类。这实际上取决于您需要如何访问它们。仔细阅读java.util所有系列的包装。

于 2012-05-28T21:27:26.123 回答
0

您在第二段中描述的几乎正是 Java 模型的工作原理。(这也是它工作的唯一方式。)当 Java 教程说“Java 是按值传递”时,它们所指的值是原始类型和对象句柄。也就是说,当您传递一个对象类型的值时,该对象不会被复制。(我认为这与在 C 中传递指向结构的指针的行为相同。)

例如,您不能做的是创建一个指向局部变量或对象字段的指针。您只能传递它们的值。

于 2012-05-28T21:33:43.367 回答
0

感谢您的所有帮助 - 它非常有用。似乎引用提供了我一直在寻找的优雅解决方案,指针在 C/C++ 中提供。到目前为止,我能看到的唯一主要区别(没有实际实现)是我们不能对引用执行算术运算。

于 2012-05-29T07:10:03.483 回答