java数组用Array.fill赋值问题

图片说明

为什么a3[0].i=30语句执行后整个数组元素都变了?请不吝赐教,谢谢!

arrays.fill的源码如下,Arrays.fill(a3,new B(3)),这里val都是一个对象,所以整个a3数组都是一个对象.

 public static void (Object[] a, Object val) {
    for (int i = 0, len = a.length; i < len; i++)
        a[i] = val;
}

因为 经过fill之后它们指向的是同一个地址,这个地址再指向一个内容。所以当你改变其中一个值的时候事实上是改变这个地址所指向的内容。因为它们都指向同一个内容,而你又修改了内容,所以所得结果当然是全部都改变了。