猜测问题:是的,Android SDK使用的事实是,尽管Java没有传递引用(没有办法让一种方法伸手去修改一个变量传递给它),变量中的值,或传递给函数等等,用于对象(包括数组)不是对象本身;这是一个值,表示对象在其他地方,在内存中的位置。因此该对象的状态可以通过接收对该对象的引用的函数进行修改。在你提到的Android SDK方法的情况下,可能它会填充数组。
这是一种方法可以返回多条信息的方式之一。 (另 —可以说是同一个,真的 —)是接受其属性它填补了非数组对象
让我们来简单的例子:
public class Temp {
public static void main(String args[]) throws Exception {
int[] x = new int[1];
System.out.println(x[0]); // 0, the default value for int[] entries
changeIt(x);
System.out.println(x[0]); // 42, it changed
}
private static void changeIt(int[] a) {
a[0] = 42;
}
}
当main
运行,我们创建一个数组并将其存储在x
中。在内存方面,我们有这样的事情:
+−−−−−−−−−+
x=Ref554615−−−−−−−−−−−−−−−−−>| (array) |
+−−−−−−−−−+
| 0: 0 |
+−−−−−−−−−+
那“Ref554615”完全是概念上的,我们从来没有看到对象引用(实际值没有,甚至没有从对象的默认toString
,尽管传言相反)。
现在,main
调用changeIt
,传递值在x
到函数。当我们进入changeIt
,我们有这样的事情:
+−−−−−−−−−+
x=Ref554615−−−−−−−−−+−−−−−−−>| (array) |
/ +−−−−−−−−−+
| | 0: 0 |
| +−−−−−−−−−+
|
a=Ref554615−−−−−−−−+
然后changeIt
确实a[0] = 42
,我们有:
+−−−−−−−−−+
x=Ref554615−−−−−−−−−+−−−−−−−>| (array) |
/ +−−−−−−−−−+
| | 0: 42 |
| +−−−−−−−−−+
|
a=Ref554615−−−−−−−−+
然后changeIt
回报,早在main
有:
+−−−−−−−−−+
x=Ref554615−−−−−−−−−−−−−−−−−>| (array) |
+−−−−−−−−−+
| 0: 42 |
+−−−−−−−−−+
changeIt
不能更改x
,变量;但它可以更改x
引用的对象的状态,因为该引用是可以传递的值。
目前尚不清楚你的问题是什么。但是你的*“我可以做这样的事情,以便能够在Java中引用一个假通行证”*:呃,不,你不能。 –
@ T.J.Crowder感谢您的通知。我在问题主体中改变了我的问题和一些细节。 –