String被关键字final修饰,所以不能被继承。

String是JAVA用于处理字符串的类, 我们平常双引号包含的字符串例如”abc”,其实就是一个String的实例。String是一个常量,一旦创建它的值就不能被修改, 是immutable只读类。 语法上定义为final的类, 就是不允许被有子类去修改String的值。 那为什么要定义String为不可变化的类呢?

1.字符串常量池的实现, 我们在代码中定义的”abc”等字符串很可能在常量池中存在, 每个String引用指向同一个字符串实现重用。如果String引用能修改字符串的值, 常量池设计无法实现。

2.安全和易用性的考虑, 在我们应用中,字符串是用得最多的类,我们经常需要在不同的类,方法间传递String, 甚至在多线程中操作String, 很多场景下是希望字符串能创建就不修改,安全简单的使用,所以String作为这个常见的一个字符串封装做了写保护,就好像C语言里面的字符串指针指向字符串常量,指针则是无法修改字符串的值的。

3.类似String的不可变类还有java.lang.Integer,Long,Double等wrapper class, 原因也是类似的。