void main() {
int[] a1 = {1,2,3,4,5};
int[] a2;
a2 = a1;
for (int i=0;i<a2.length;i++){
a2[i] += i;
}
for (int a:a1){
print(a + " ");
}
} /* Output:
1 3 5 7 9
*///~
什么是引用?
??引用其實(shí)就像是一個(gè)對象的名字或者別名。一個(gè)對象在內(nèi)存中會(huì)請求一塊空間來保存數(shù)據(jù),根據(jù)對象的大小,它可能需要占用的空間大小也不等。訪問對象的時(shí)候,我們不會(huì)直接訪問對象在內(nèi)存中的數(shù)據(jù),而是通過引用去訪問。引用也是一種數(shù)據(jù)類型,我們可以把它想象為類似 C/C++ 語言中指針的東西,它指示了對象在內(nèi)存中的地址——只不過我們不能夠觀察到這個(gè)地址究竟是什么。與之不同的是,C/C++的引用是同一塊內(nèi)存的不同名字,而Java的引用是指向一個(gè)對象,引用本身也占用了內(nèi)存。
??對于基本數(shù)據(jù)類型來說,對象的引用,其實(shí)是在內(nèi)存中新開辟了一個(gè)空間,把原對象的值放進(jìn)新開辟的內(nèi)存空間中。
??對于其他數(shù)據(jù)類型來說,對象的引用,其實(shí)是把新對象指向原對象的內(nèi)存地址,兩個(gè)對象共用一個(gè)內(nèi)存空間。
??所以在上述代碼中,數(shù)組不是基本數(shù)據(jù)類型,所以a1和a2指向了同一個(gè)內(nèi)存空間,所以對其中任何一個(gè)進(jìn)行更改,都會(huì)改變另一個(gè)的值。