- String,StringBuilder,StringBuffe
- String,StringBuilder,StringBuffe
- String,StringBuilder,StringBuffe
- String,StringBuilder,StringBuffe
- String,StringBuilder,StringBuffe
- String,StringBuilder,StringBuffe
- String、StringBuilder、StringBuffe
- String StringBuilder,StringBuffe
- String StringBuilder StringBuffe
- String,StringBuilder,StringBuffe
String
String += 操作
String += 操作这段代码输出的结果是: “123456”, 看着好像是string被改变了,但实际上这是一种假象。JVM对上述代码是这样处理的:
- 执行第一行代码:新建一个String对象“123”(该对象保存在字符串常量池中),将“123”对象的实例引用赋值给string(保存在栈中)。
- 执行第二行代码:再新建一个String对象string,用来执行string + "456"操作,也就是说,string这个对象是没有发生改变的(String是final的不可变)。
每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,这样的效率极低。
String 常量+常量
String 常量+常量你会发现生成String对象的速度简直太快了,而这个时候StringBuilder速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:String string = "123" + "456";其实就是:String string = “123456”。
StringBuilder
StringBuilder线程不安全,但效率最高。
StringBuffer
StringBuffer线程安全,是在StringBuilder实现的方法上加了synchronized关键字。适合多线程下的字符串操作。
总结
类名 | String | StringBuilder | StringBuffer |
---|---|---|---|
线程安全 | 安全 | 不安全 | 安全 |
字符串类型 | 常量 | 常量 | 常量 |
执行效率 | 最低 | 最高 | 略高 |
适用场景 | 常量拼接 | 单线程拼接 | 多线程拼接 |
网友评论