总结一下:
String , StringBuffer , StringBuilder三者之间的区别
String 字符串常量
StringBuffer 字符串变量 线程安全 效率低
StringBuilder 字符串变量 线程不安全 效率高
当我们在字符串缓冲区被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快.
但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,
所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
首先由于String是字符串常量一旦赋值不能被修改,因此如果要频繁对字符串进行操作还是不要选用String类型
之前我们经常会遇到这样的例子:
String s = " hello";
s = s + "world";
System.out.println(s);
我们觉得这里的字符串变量只有一个s其实不是的当我们对字符串进行修改操作时,其实就会创建一个新的String对象去接收修改后的String对象,原来的字符串就会被垃圾回收器GC回收掉
StringBuffer和StringBuilder就不一样了,他们俩是字符串变量,每次我们对字符串进行操作的时候,都是基于对象本身进行操作,不会像String类型产生新的对象那么麻烦,因此效率更快.
经典例题
String s = " hello" +"world"+"i love you ";
StringBuffer sb =
new StringBuilder("hello").append("world").append("i love you");
我们发现第一行代码执行效率比第二行其实这是JVM的一个把戏
第一行
String s = " hello" +"world"+"i love you ";
实际上等同于
String s = "hello world i love you ";
> 它只定义了一个字符串因此执行效率肯定高于StringBuffer但是如果这样定义在做字符串拼接时使用的外部的String对象的话进行拼接的效率就不如StringBuffer.
> 首先在内存中就会先创建四个String对象,用s4去接收前三个的字符串,然后jvm再将s1,s2,s3回收,这样子的效率明显较低
String s1 = "hello";
String s2 = "world";
String s3 = " i love you";
String s = s1 + s2 + s3;
三者使用总结:
1:如果操作的数据少 -->String
2:单线程操作字符串缓冲区 下操作大量数据 -->StringBuilder
3:多线程操作字符串缓冲区 下操作大量数据 -->StringBuffer
String,StringBuffer,StringBuilder三者之间的区别
最新推荐文章于 2023-07-01 00:47:38 发布