String
字符串常量,字符串内容和长度都是不可变的。定义如下:
1 | /** |
String
的操作都是在堆内存中重新申请一块内存区并赋值,最终返回该存储区首地址给引用变量。所以如果频繁修改 String
会产生堆内存垃圾,直到 java
触发内存管理机制才能释放。所以在形参传递时, String
类似值传递。
StringBuffer
字符串变量,同时也是线程安全的(Synchronized
)。
StringBuilder
字符串变量,但不是线程安全的。
使用策略
String
:操作少量的数据StringBuilder
:单线程操作大量数据StringBuffer
:多线程操作大量数据
不要使用 String
类进行频繁的字符串拼接或插入删除,因为那样的性能较差,应该使用 StringBuffer
或 StringBuilder
类,这在 Java
的优化上是一条比较重要的原则。执行速度上:String < StringBuffer < Stringbuilder
。