这属于传值传引用问题
首先一个问题 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
所以 你可以看到值发生了改变
public static void main(String[] args) {
int z=9;
System.out.println(fun(z));
/*z怎么能运用打印方法获取被fun方法改变后的值,也就就是x*/
}
public static int fun(int x){
x=10;
return x;
}
因为数组是对象,传递的是引用。