猜測問題:是的,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感謝您的通知。我在問題主體中改變了我的問題和一些細節。 –