在类之间共享Java变量的最佳方法

时间:2013-08-23 22:46:33

标签: java variables member

我在Java中有一个奇怪的问题。我可以解决它,但解决方案似乎效率低下。

我有一个类,简化为

 class Zot
 { 
      double edges[];
  }

问题在于,在许多情况下,我希望实例A和实例B共享一个边缘实例。换句话说,实例A可以分配边[2]并希望实例B共享边[2]。这很容易,因为我可以将实例B设置为指向实例的A边缘[2]。但我怎么能有效地做到这一点?如果我在实例A中分配了edges [],那么我可以简单地将B的实例指定为指向A.但是我经常只想在A中分配单个边(例如edge [2])然后在B中分配它。在Java中,我不能(据我所知)分配一个数组的单个成员(就像在C ++中一样)。理想情况下,我只想分配有用的成员并分配它。当然,我可以分配所有4个成员,分配我需要的成员,然后将不需要的成员设置为null并让GC清理它们,但是如果有数百或数千个实例看起来很笨拙。

建议?

2 个答案:

答案 0 :(得分:1)

您可以在两个类之外声明和分配double edges[],然后将此数组作为构造函数中的参数传递给要共享它的两个实例。

在Java中,数组也是一个对象。当您创建像double edges[] = new double[2]; edges这样的实例时,它将作为指针传递,而不是作为副本传递。

这意味着如果您在A类中对数组进行更改,那么B类也会看到此更改。

答案 1 :(得分:0)

据我所知,您似乎想要在类之间共享edges数组中的单个元素,而不是共享整个数组。

如果您的edges数组是Object的数组,那么这是可能的,并且可能有意义。但是,由于您的数组是原始数组,因此没有共享单个元素的真实概念。

您可以指定数组的元素与另一个数组的元素相等,但对一个数组中元素的后续更改不会反映在另一个数组中。

您可以在类之间共享整个数组,在这种情况下,任何更改都将反映在两个数组中(好吧,只有一个数组,因此两个类都会看到它们都引用的单个数组的更改)。 / p>

最重要的是: 当您在java中声明一个基元数组时,会立即分配内存,因此没有任何好处(或机制)来声明该数组的单个元素。因此,对于您当前的数据模型,您没有理由不预先声明您的数组,因为您无法使用它们节省空间。