String
- 为什么要设计成final
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.
字符串是恒定的,创建之后它们的值不能被改变。StringBuffer是可变的strings.字符串对象不可变让它们可以被共享。
String a = "hello";
a = "world"
如下图,仅仅是将引用指向成了另一个常量,而原来的hello并没有改变。
字符串转换.png
*String使用final修饰的好处
此处有一篇帖子讲的比较详细,清楚,在此引用一下
String使用final修饰的好处
- String不可变优点
1方便做hash中的key
因为 String 的 hash 值经常被使用,例如 String 用做 HashMap 的 key。不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。
2String pool的需要
如果String被创建了,从String pool中直接获取引用,只要String 不改变,才能从String pool获取
3安全性
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
4线程安全
String 不可变性天生具备线程安全,可以在多个线程中安全地使用。
- String,StringBuffer,StringBuilder三者的对比
String