两个不同的变量指向相同的内存位置

时间:2013-07-25 20:34:24

标签: java arrays complex-data-types

我想使用不同的变量来访问相同的数据。

即。我有一个数组:

float[] vector = new float[3];

我希望数组中的每个值也都有自己的标签,即:

vector[0] == pitch;
vector[1] == yaw;
vector[2] == roll;

我想使用vector []&俯仰/偏航/滚动可互换。当我在两个函数之间传递所有三个值时,我想引用数组,但是当我单独访问它时,我想将它们称为音高偏航和滚动。

这在Java中可行吗?

3 个答案:

答案 0 :(得分:5)

这是不可能的。您无法设置pitch = 20并获取vector[0] == 20;至少,原语在Java中不起作用。但是你可以做什么 - 你应该做什么 - 创建一个名为Vector的类,其方法名为setPitchgetPitch等,并使用float[3]作为内部实施细节。

答案 1 :(得分:2)

您无法使用原始float和类型为float[]的数组执行此操作。 Java不支持作为指针的变量或对基元的引用。

但是,有一些解决方法。

首先,您可以使自己的可变引用类型保持浮点值。

MyFloat[] vector = new MyFloat[3] { new MyFloat(p), new MyFloat(y), new MyFloat(r) };
MyFloat pitch = vector[0];
MyFloat yaw = vector[1];
MyFloat roll = vector[2];

但是将数组包装在一个对象中可能会更好,并使用方法通过有意义的名称而不是变量来获取成员。

public class Orientation {
  private float[] vector = new float[3];

  public float[] getArray() { return vector; }

  public pitch() { return vector[0]; }
  public yaw() { return vector[1]; }
  public roll() { return vector[2]; }

  public setPitch( float pitch ) { vector[0] = pitch; }
  public setYaw( float yaw ) { vector[1] = yaw; }
  public setRoll( float roll ) { vector[3] = roll; }
}

这会让你接近 - 虽然你不能只说pitch,但你可以说o.pitch()

答案 2 :(得分:0)

在java中传递原始数据类型只会将其数据的副本发送到请求的方法。如果您希望将引用传递给值(而不是副本),则应使用变量的Object形式。

因此,请使用Float代替float。这将使您的数字成为对象变量而不是原始数据类型。