① 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}。这个明白了吗?