关于String,StringBuffer和StringBuilder详细讨论

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并没有改变。


关于String,StringBuffer和StringBuilder详细讨论_第1张图片
字符串转换.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,StringBuffer和StringBuilder详细讨论_第2张图片
String

你可能感兴趣的:(关于String,StringBuffer和StringBuilder详细讨论)