Java引用变量

时间:2012-05-28 21:23:55

标签: java pointers pass-by-reference

我知道Java不允许使用C ++指针。但是,我听说过一些关于引用的东西(大概也类似于C ++)。我的问题涉及以下问题:

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

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

谢谢,

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

public class A {

    private A[] refs;

    public A(A... refs) {
        this.refs = refs;
    }
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

例如,您不能创建指向局部变量或对象字段的指针。你只能传递他们的价值观。

答案 4 :(得分:0)

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