1

好的,这绝对是一个 n00b 问题,但这里有。

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

我知道这是可能的,因为 getRotationMatrix 方法可以做到这一点......即如果我在类级别编写以下内容:

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

然后在我调用的方法中:

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

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

我问的原因是我正在尝试编写一个做同样事情的方法,但一直遇到按值传递的难题。我正在尝试通过将对 FloatBuffer 的引用传递给方法来初始化它。

4

3 回答 3

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.
}
于 2012-06-20T05:09:27.467 回答
0

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

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

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

在您的示例中,为 getRotationMatrix() 方法提供了一个新的 rotationMatrix 引用。但是通过这个参考,没有人可以阻止您操作实际的 Array 对象。

于 2012-06-20T05:51:25.160 回答
0

Java 对象通过引用传递。您可能会将引用与始终按值传递的原语混淆。

于 2012-06-20T05:06:38.377 回答