首先我们来看一下一个小例子:
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的值。