对于数组的赋值机制,很多小伙伴们弄不懂其中原理,下面我来简单说一说数组的赋值机制。
1.首先来举个例子说明一下变量赋值的机制,其实就是简单地值拷贝。
public class arraytest {
public static void main(String[] args){
int n1=10;
int n2=n1;
n2=80;
System.out.println("n1="+n1);
System.out.println("n2="+n2);
}
}
这里n1赋值为10后,n1的值赋值给n2,n2现在为10,后来又将n2赋值为80,此时n1并不会因为n2的变化而变化。
2.现在来说一下数组的值传递是怎么样的。
其实数组的赋值是传递的地址,首先还是举个例子:
int arr1[]={1,2,3};
int arr2[]=arr1;
arr2[0]=10;
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
这里说明一下结果,遍历数组arr1后输出的分别是10, 2,3,此时有的人就会想了,我给arr2下标为0的地方赋值,关arr1什么事?arr1怎么会变呢?现在我就来解答一下疑惑,这是因为数组的赋值传递是引用传递。
用韩顺平老师的图来讲解以下。
这里的arr1和arr2相当于栈,而数组中的数据{1,2,3}就相当于与内存中的堆,arr1[]是指向{1,2,3}这个堆的,所以可以访问,当把arr1赋值给arr2时,arr2就具有了和arr1一样的访问权,因此对arr2的数据更改,会影响到arr1的数据。
如果还有人听不懂,那我就再举个很简单的例子,我们都玩过“我的世界”这款游戏。比如你和你的朋友一起玩,你的朋友做了一把木剑,放在了他自己的背包里,他又做了一个相同的木剑给了你,你们都有了木剑(这就相当于简单地值拷贝)。现在有一个箱子,你朋友做了一把木剑放在了箱子里,你觉得木剑太垃圾了,把木剑换成了钻石剑放在了箱子里,你朋友打开箱子发现木剑变成了钻石剑(这就是引用赋值)
我想到这里应该讲的也挺清楚的了,数组的赋值引用,变得是地址罢了。希望能够帮助到小伙伴们!!