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