String,StringBuilder,StringBuffer的区别?

1.执行速度,在这方面运行速度快慢为:StringBuilder >StringBuffer >String
String 最慢的原因:

String 为字符串常量,而StringBuilder 和 StringBuffer 均为字符串变量,即 String 对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

2.线程安全
在线程安全上,StringBuilder 是线程不安全的,而 StringBuilder 是线程安全的 (StringBuffer 中很多方法可以带有synchronized 关键字)

3.总结一下
String:适用于少量的字符串操作的情况;
StringBuilder:适用于单线程下载字符缓冲区进行大量操作的情况;
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况;
结合 jdk 的源码查看

参考代码: StringBuTest

// String,StringBuilder,StringBuffer简单使用测试
public class StringBuTest {

	public static void main(String[] args) {
		String s1 = "233";
		s1 = s1 + "wwww";
		System.out.println(s1);

		StringBuilder sbd = new StringBuilder();
		sbd.append("StringBuilder").append("12").append("34").append("56");
		System.out.println("StringBuilder:" + sbd.toString());

		StringBuffer sbf = new StringBuffer();
		sbf.append("stringbuffer").append("12").append("34").append("56");
		System.out.println("StringBuffer:" + sbf.toString());

		StringBuilder sb = new StringBuilder("1111199999");
		StringBuffer sbffer = new StringBuffer("1111199999");

		// 下面是验证线程安全的测试
		// 循环创建多个线程,测试StringBuilder
//		for (int i = 0; i < 100; i++) {
//			new Thread(new MyThread(sb)).start();
//		}
		
		// 循环创建多个线程,测试StringBuffer
		for (int i = 0; i < 100; i++) {
			new Thread(new MyThreadSbf(sbffer)).start();
		}
	}

	private static class MyThread implements Runnable {
		// 定义成员属性
		private StringBuilder sb;

		// 构造函数,参数初始化
		private MyThread(StringBuilder sb) {
			this.sb = sb;
		}

		public void run() {
			// 循环可以增加出现线程不安全的情况
			for (int i = 0; i < 100; i++) {
				sb.reverse();
			}
			// 输出sb字符串(默认调用了toString())
			System.out.println(sb);
		}
	}
	
	private static class MyThreadSbf implements Runnable {
		// 定义成员属性
		private StringBuffer sb;

		// 构造函数,参数初始化
		private MyThreadSbf(StringBuffer sb) {
			this.sb = sb;
		}

		public void run() {
			// 循环可以增加出现线程不安全的情况发生
			for (int i = 0; i < 100; i++) {
				sb.reverse();
			}
			// 输出sb字符串(默认调用了toString())
			System.out.println(sb);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiangyuenacha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值