String使用final修饰的原因
final修饰符的作用
望文生义,final
意为“最终的,最后的”
,我理解为“不能被改变的”,它可以修饰类、变量和方法。
所以我是否可以理解为被它所修饰的类、变量和方法都不能被改变呢?答案是”是“,因为有以下约束条件的存在:
1.final修饰类
,代表该类不能被继承,也就是不能
有子类。
2.final修饰方法
,代表该方法不能被重写。
3.final修饰变量
,final修饰的变量,无论是类属性
(类属性可以理解为一个将一个类作为另一个类的属性)、对象属性
、形参
还是局部变量
,都需要进行初始化
操作。
所以用final修饰String:主要是为了以下两点:
1.安全性
:由于String类不能被继承,所以就不会被修改,这就避免了因为继承引起的安全隐患(比如,String中有很多方法是通过调用操作系统的本地Api,如果String不是final,可以被重写,那么可能会造成一些系统错误)
2.效率
:java的字符串都存放在字符串常量池中,在创建一个新的字符串时,如果常量池中已经有这个字符串了,则返回这个字符串的引用,不会新建一个。效率会大大提高。如果String
不是final
的,当修改一个字符串时,如果有多个引用指向该字符串,那么其他引用的值也会发生变化。
1.为了实现字符串池,只有字符串不变时,才能实现常量池
2.为了线程安全;使用 private final char[] values 保证了String的引用和值都不变
3.为了实现String可以创建HashCode不可变性