改变方法中的类成员?

时间:2012-06-20 05:00:14

标签: java android object reference

好的,这绝对是一个n00b问题,但现在就是这样。

我理解它的方式是,Java中的对象是通过值传递的,而不是通过引用传递的。那么如何通过将方法的引用传递给方法来改变方法中的类成员?

我知道可以这样做,因为getRotationMatrix方法可以做到这一点......即如果我在班级写下以下内容:

private float rotationMatrix[] = new float[9];

然后在我调用的方法中:

SensorManager.getRotationMatrix(rotationMatrix, inclinationMatrix, gData, mData);

它将改变rotationMatrix。我的问题是,如果所有内容都按值传递,那么该方法如何改变我传递给它的对象中的内容?

我问的原因是我正在尝试编写一个执行相同操作的方法,但继续遇到按值传递的难题。我试图通过将一个引用传递给一个方法来初始化FloatBuffer。

3 个答案:

答案 0 :(得分:3)

是对象按值传递。但是Object是一个引用,因此传递了引用的副本。使用引用可以修改对象,但更改引用不会对调用者产生任何影响。

例如:

List list = new ArrayList();
modifyList(list);
noOp(list);

void modifyList(List l)
{
   l.add("A"); // A is added to list
}

void noOp(List l)
{
   l = null; // No effect to list, you are modifying local variable l.
}

答案 1 :(得分:0)

Java对象通过引用传递。您可能会将引用与基元混淆,基元始终按值传递。

答案 2 :(得分:0)

好吧,如果您正在处理java中的对象,那么请理解有两件事。第一个是对象,第二个是对象的引用。

因此,当您将对象的引用传递给方法时,引用本身将按值传递,即在您的方法中创建与传递的引用相同的新引用。但请注意,虽然引用被复制但是对象就位,可以通过这个新引用进行操作。

SensorManager.getRotationMatrix(rotationMatrix, inclinationMatrix, gData, mData);

在您的示例中,getRotationMatrix()方法被赋予一个新的rotationMatrix引用。但是通过这个引用,没有人可以阻止你操纵实际的Array对象。