例:
final String s = “aaa”;
final Map map = new HashMap()
s = "bbb";
map.put("aa","111");
结果是s报错,map成功运行。
fianl的特性是:
final修饰的类不能被继承;
final就是的方法不能被重写,可以被重载。
final修饰的变量不可修改。
到这里是没有毛病的,但是为什么map就可以修改呢?
这里我在网上查阅了一些博客,资料说的是final修饰的变量不可被修改说的是 引用 不可被修改。
像String类型的变量本身的值是不可变得。修改String变量的值就是修改引用,直接执行另一个内存地址了。即改变了引用,和final冲突。
而map集合就不一样了,map集合进行内容操作时,只是在内存中修改值,并没有重新指向新的地址,所以使用fianl修饰就算对map进行操作也没有报错。
ps:重写和重载的区别
1.重写必百须继承,重载不用。
2.重写的方法名,参数数目相同,参数类型兼度容,重载的方法名相同,参数列表不同
3.重写的知方法修饰道符大于等于父类的方法,重载内和修饰符无关。
4.重写不可以抛出父类没有抛出的一般异常容,可以抛出运行时异常