我知道Java不允许使用C ++指针。但是,我听说过一些关于引用的东西(大概也类似于C ++)。我的问题涉及以下问题:
我有一个类“A”,比如,我在内存中实例化(使用new),我希望根据我的选择将这些类“链接”到另一个。在C ++中,我只有一个类A指针的向量(在类A中定义),我向其添加了指向要链接到的类A的实例的指针。这基本上就像在内存中构建一个全向图(或单向,取决于我如何构建我的链接)
我的问题是我能用优雅的方式在Java中做到这一点,以及如何做到这一点?我猜它与引用有关。对于这个问题,指针似乎是一个简单的解决方案,但我是Java新手并且学习如何在没有指针的情况下做这些事情。我不确定如何定义引用。在C ++中,我会使用A * mypointer = new A();
谢谢,
答案 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不允许new
实例化它。
至于存储对A
的多个实例的引用,您有很多选择。您可以使用List
,例如ArrayList
或任何其他Collection
类。这实际上取决于您如何访问它们。仔细阅读所有馆藏的java.util
包。
答案 3 :(得分:0)
您在第二段中描述的内容几乎就是Java模型的工作原理。 (这也是它工作的唯一方式。)当Java教程说“Java是按值传递”时,它们所指的值是原始类型,而对象句柄。也就是说,当您传递对象类型的值时,该对象不会被复制。 (我认为这与在C中传递指向结构的指针的行为相同。)
例如,您不能创建指向局部变量或对象字段的指针。你只能传递他们的价值观。
答案 4 :(得分:0)
感谢您的所有帮助 - 它非常有用。似乎引用提供了我正在寻找的优雅解决方案,这些指针在C / C ++中提供。到目前为止,我能看到的唯一主要区别(没有实际实现)是我们不能对引用进行算术运算。