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