2.1 final的实质
就是说,实际上final修饰的东西,只是地址不能改变(即引用不能改变),但是对应地址内的值是可以修改的。
2.2 final修饰不同变量的对比
所以final Map map = new HashMap();
final List list = new ArrayList();
final String a = “2”;
在这三句中分别声明了一个map、list和a字符串,其中map和list是可以修改的,比如可以使用map.put()、map.remove()、list.add();原因:map和list对应的是栈中存储的地址,所以其地址内的值是可以改变的,但是字符串a为什么不能修改呢,实际上String a只是创建了一个指向“2”值的引用,在创建时就已经明确值不可变,如果要修改值,实际上是修改了a的引用地址。