String类为什么是final的?
······final意味着String类不能被继承。可从安全和效率两方面考虑:
········安全:如果可以继承String类,那么重写它的方法可能会带来不确定的语义或者错误的语义
········效率:由于多态以及String在Java中被广泛的使用,后期绑定可能带来效率的降低
String为什么不可变?
······String是由private final char数组实现的。
·········final表示对象引用不变,数组本身是可变的。
·········String的不可变性在于private数组对外不可见并且String类中的方法没有修改数组里的元素。
String不可变的好处?
······字符串常量池:节省内存空间,提高效率
······线程安全:对String只有读操作没有写操作
······如果String是可变的,那么String对象的修改将会影响常量池中该对象的所有引用的表现