如图,字符串类是用final修饰的,这说明String类是不可被继承和修改的,其成员变量本质就是final类型的字符数组。String类声明为final类型,大抵是从“性能”和“安全性”两方面考虑的。
- 不可变性支持字符串常量池
字符串的不可变性使得字符串可以存储在字符串常量池中,同一个值可以被多个变量引用,可以节省内存空间的,提高效率。如果字符串是可变的,则其中一个变量将值改变,其他变量的值也将跟着改变,这样做就失去了常量池的意义。 - 不可变性允许多线程共享字符串
可以直接将String类型用于多线程编程中而不需要做其他同步操作,因为String类型不可变,本身就是线程安全的。 - 不变性使得String创建时就具有固定的hash值
所以,String类型特别适用于做Map的键值,不仅映射取值非常快,还可以保证HashMap和HashSet等键值的唯一性。 - String被广泛用于Java类的参数
比如Socket编程中的IP和端口号等,如果是可变的,可能容易导致安全威胁。