携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
String、StringBuffer、StringBuilder区别 一、概念区别: 二、StringBuffer 和 StringBuilder 的区别: 三、代码示例:: 简单总结也是借鉴其他大佬的 例子记得是视频学习还是借鉴其他文章的,感谢大佬 如有问题,望指点 一、概念区别: String类是不可变类,任何对String的改变都会引发新的String对象的生成;【值+】
StringBuffer是可变类,任何对它所指代的字符串的改变都不会产生新的对象【值append方法】
StringBuilder是可变类,任何对它所指代的字符串的改变都不会产生新的对象【值append方法】
二、StringBuffer 和 StringBuilder 的区别: StringBuffer 和 StringBuilder 的不同是 StringBuffer的append方法是synchronized关键字修饰,线程安全【很多方法都是线程安全的】;
StringBuilder的append方法不是synchronized关键字修饰,线程不安全
两者类似于HashMap【线程不安全】和HashTable【线程安全】
三、代码示例:: public class StringStringBuilderStringBuffer { public static String baseinfo = "Mr.y"; public static final int count = 200_000;
/*执行的是String的 + 号 进行 赋值 【底层是StringBuilder 的 append()方法进行拼接 然后 再toString 成为String ,实际就创建了StringBuilder和String两个对象 ,耗损内存】 */ public static void doStringTest(){ String str = new String(baseinfo); long startCurrentTimeMillis = System.currentTimeMillis(); for (int i = 0; i <count/100; i++) { str = str+"miss"; } long endCurrentTimeMillis1 = System.currentTimeMillis(); System.out.println("这是线程不安全的String的+号赋值时间:"+(endCurrentTimeMillis1 - startCurrentTimeMillis)); } /*StringBuilder 线程不安全 public StringBuilder append(String str) {} */ public static void doStringBuilderTest(){ StringBuilder str = new StringBuilder(baseinfo); long startCurrentTimeMillis = System.currentTimeMillis(); for (int i = 0; i <count/100; i++) { str = str.append("miss"); } long endCurrentTimeMillis1 = System.currentTimeMillis(); System.out.println("这是线程不安全的StringBuilder的append拼接时间:"+(endCurrentTimeMillis1 - startCurrentTimeMillis)); }
/StringBuffer : 线程安全 public synchronized StringBuffer append(String str) {}/ public static void doStringBufferTest(){ StringBuffer str = new StringBuffer(baseinfo); long startCurrentTimeMillis = System.currentTimeMillis(); for (int i = 0; i <count/100; i++) { str = str.append("miss"); } long endCurrentTimeMillis1 = System.currentTimeMillis(); System.out.println("这是加了synchronized线程安全的StringBuffer的append拼接时间:"+(endCurrentTimeMillis1 - startCurrentTimeMillis)); }
public static void main(String[] args) {
doStringTest();
doStringBuilderTest();
doStringBufferTest();
/运行结果:这是线程不安全的String的+号赋值时间:114 这是线程不安全的StringBuilder的append拼接时间:1 这是加了synchronized线程安全的StringBuffer的append拼接时间:2/ }
}