① java傳遞數組:為什麼傳遞數組能通過傳遞一個數組給另一個方法並修改值後,能得到一個不一樣數組
這屬於傳值傳引用問題
首先一個問題 String str="1";這句話到底做了些什麼事情?
String str聲明一個變數str
"1"劃分一個值為"1"的內存空間
=號,使用變數str引用該內存空間。
理解了這個,再來看你的第二個例子:
int z=9
我們用->來表示「引用」關系
此時z->9,沒錯吧?
fun(z)將z的引用傳遞給該方法,參數為Int x
則,z->9,且x->9
然後x=10則是進行這一步:x->10
此時z的引用並沒有改變啊
所以 z還是保持9
再來看第一個例子
int[],在內存里並不存在這么一塊單獨的空間用於存放數組
它的做法是,劃分出和數組等量的空間出來,然後使用一個int[]歸納全部的空間
於是
你對int[]的傳遞fun(temp)其實是傳遞這個int[]引用
然後 取出來的int[0]自然是temp[0]
你對x[0]的操作x[0]=6並不是把x[0]原來引用的空間裡面的值替換成了6
而是x[0]不再引用1,轉而引用6
所以 你可以看到值發生了改變
② java如何把數組值傳遞給另一個函數
publicstaticvoidmain(String[]args){
int[]array1={1,2,3,4,5,6};
int[]array2={1,2,3,4,5,6};
sortArray(array1,array2);
}
publicstaticvoidsortArray(int[]array1,int[]array2){
//.........
}
③ 求解java中「把數組傳遞給方法」的一個概念性問題
我給你用大白話說吧。
當數組傳遞給參數時,傳遞的是這個數組的地址的值。這時形參的值(也就是數組的地址)同數組一樣都指向存儲數組的內存。所以你對形參進行操作想當於直接操作實參。
其實你要是懂他們在內存中的存儲方式就好懂多了。當新建一個數組時,電腦是不分配內存的,只有當初始化了之後才分配內存。你所用的(比如int[ ] array = {1,2,3})數組名array其實它代表的是一個地址,這個地址指向{1,2,3}。把array傳遞給了形參(比如max(int[ ] m,),這時形參m也是一個地址,同樣指向{1,2.3}。這個明白了嗎?