好的,这绝对是一个n00b问题,但现在就是这样。
我理解它的方式是,Java中的对象是通过值传递的,而不是通过引用传递的。那么如何通过将方法的引用传递给方法来改变方法中的类成员?
我知道可以这样做,因为getRotationMatrix方法可以做到这一点......即如果我在班级写下以下内容:
private float rotationMatrix[] = new float[9];
然后在我调用的方法中:
SensorManager.getRotationMatrix(rotationMatrix, inclinationMatrix, gData, mData);
它将改变rotationMatrix。我的问题是,如果所有内容都按值传递,那么该方法如何改变我传递给它的对象中的内容?
我问的原因是我正在尝试编写一个执行相同操作的方法,但继续遇到按值传递的难题。我试图通过将一个引用传递给一个方法来初始化FloatBuffer。
答案 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对象。