首先我们来看一下一个小例子:
final List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
List<Integer>list2=new ArrayList<Integer>();
list=list2;
这里list=list2处报编译错,是因为list是一个final的对象,是指它的引用不能再指向其他的实例。这里让它指向list2的实例 显然是有问题的,但是这里并不能说明list的值就不会变了。
我们再看一下下面的例子:
public class TestRefer {
public static void main(String[] args) {
final List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
List<Integer>list2=new ArrayList<Integer>();
//list=list2;
list2=list;
list2.add(3);
System.out.println(list.toString());
}
}
打印输出[1, 2, 3] 这说明list的值变了,是因为虽然list的引用不能再指向别的实例,但是可以让别的引用指向list的实例。
从而改变list的值。
本文通过两个示例探讨了在Java中使用final关键字修饰List类型变量的影响。即使List实例被声明为final,其内部元素仍可被修改。文章展示了如何通过其他引用指向同一个List实例并对其内容进行更改。
10万+

被折叠的 条评论
为什么被折叠?



