Java中的数组赋值和引用
当您执行Java中的数组赋值和引用,java,arrays,reference,Java,Arrays,Reference,当您执行b=a时b引用a。但是,当您指向a=ca时,a指的是c,但b仍然指的是您分配的旧对象(该对象的地址作为已分配的值,并且是常量)a,因为这是您分配时包含的内容 除非你重新分配它,否则它不会改变 假设你把一个物体想象成一座房子,把一个参照物想象成一张写有房子地址的纸a、b和c都是参考。所以当你说 6 7 8 1 2 3 4 5 你在建一栋房子,里面有1、2、3、4和5个;而a是一张写着那所房子地址的纸 int[] a = {1, 2, 3, 4, 5}; b是另一个参考,这意味
b=a时
b引用a。但是,当您指向a=c
a时,a指的是c,但b仍然指的是您分配的旧对象(该对象的地址作为已分配的值,并且是常量)a
,因为这是您分配时包含的内容
除非你重新分配它,否则它不会改变 假设你把一个物体想象成一座房子,把一个参照物想象成一张写有房子地址的纸<代码>a、
b
和c
都是参考。所以当你说
6 7 8
1 2 3 4 5
你在建一栋房子,里面有1、2、3、4和5个;而a
是一张写着那所房子地址的纸
int[] a = {1, 2, 3, 4, 5};
b
是另一个参考,这意味着它是另一张纸。但是上面有同一栋房子的地址
int[] b = a;
现在我们建造了一座新房子,在里面放了6个、7个和8个c
将是一张写有新房地址的纸。当我们说a=c
时,原来是a
的纸条就被扔掉了,我们用新房子的地址做了一张新纸。这是a
的新值
但是b
是一张单独的纸。它没有改变。我们所做的一切都没有改变它
引用是这样的。将a的值赋给b时,意味着b引用的是分配给数组a的相同空间。这意味着b将获取对数组a所做的任何更改,但如果对变量a所做的任何更改。如果使a引用新数组,b仍将引用旧的a引用
int[] c = {6, 7, 8};
a = c;
这就是为什么:
您有2个对象(数组)和3个对象引用(a、b、c)。你只是在交流事情的重点 不要被“列表”这个名字激怒。这些图像是从python可视化中获取的,但在Java中的原理是相同的
数组为一个分配了一个新数组:
数组b
分配给a
后面的实例:
数组c
分配了一个新数组:
最后,a
被分配给c
后面的实例,b
没有被重新分配,仍然保留对旧a
的引用:
从pythontutor.com上的可视化图像中拍摄的图像很好,这就是每种编程语言的工作方式。
int[] c = {6, 7, 8};
a = c;
b = a; // b basically referring to memory used by array a
a = c; // reference pointed by a has changed, but b is still referring the old array a