定义成final类型的原因主要有一下几点:
1、 final 修饰Stirng ,是不允许其他类继承的、不可以改变的类,从而保证了使用时的安全性。
**2、**再从效率和安全性上讲。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。
3、 String类中的成员属性也几乎都设计成了private final的,这样String就被设计成一个不变类,这样有助于共享,提高性能。可以将字符串对象保存在字符串常量池中以供与字面值相同字符串对象共享。如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,将同时改变一起共享字符串对象的其他 String类型变量所引用的对象的值。
4、 String被设计为不变类,其中的offset,value[]都被设计成private final的,这样在多线程时,对String对象的访问是可以保证安全的。java程序语言的许多特性依赖于不可变的String对象。