最终名单重新分配

shr*_*rma 3 java collections list

创建最终列表为

final List<String> list = new ArrayList<String>();

不会让我重新分配列表,因为列表是最终的.

list = new ArrayList<String>(); 会给出编译错误.

但是在插入第16个元素后,必须创建一个容量= oldCapacity*3/2 +1的新ArrayList,并且必须将其分配给list.

JVM如何允许在这种情况下重新分配最终列表.

Era*_*ran 5

但插入第16个元素后,必须创建一个容量= oldCapacity*3/2 +1的新ArrayList,并且必须将其分配给列表

不,创建了一个新的后备阵列(插入第11个元素时).后备数组是ArrayList(定义为transient Object[] elementData;)的实例变量.对该实例变量执行赋值,而不是final.

ArrayList未创建新实例,并且该list变量仍引用相同的实例.

因此,在您描述的方案中没有对最终变量的赋值.