1.设计需求
java设计者不希望用户定义类去继承String类,所以定义为final类型。final修饰类时,类不可被继承;修饰变量,变量的值不可以被修改;修饰方法,方法不可被子类重写。做这样的规则规定,为了代码更严谨
2.性能需求
String类中的成员属性也几乎都设计成了private final的,这样String就被设计成一个不变类,这样有助于共享,提高性能。可以将字符串对象保存在字符串常量池中以供与字面值相同字符串对象共享。如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,将同时改变一起共享字符串对象的其他String类型变量所引用的对象的值。
3.安全方面的考虑
Java设计出于安全性的考虑,不变的数据对于线程安全是有用的。