String StringBuffer StringBuilder的区别

不需要过场,就开门见山吧。

String

String是不可变的(immutable),一旦String对象被创建,它的值就不会改变。

直接上代码

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String a = "hello";			//对象a初始化
		String b = a;				//将a赋值给b
		System.out.println("a = " + a);
		System.out.println("b = " + b);

		a = "world";				//改变a的值
		System.out.println("a = " + a);
		System.out.println("b = " + b);
	}

}


输出:

a = hello
b = hello
a = world
b = hello

可见给对象a的赋值,是重新new出来一个对象。不可变的字符串具有一个优势就是编译器可以把这些字符串设为共享的。缺点是在需要频繁进行String "+" 操作时,会new出很多String对象,这会影响性能。这时候就需要使用StringBuffer。

StringBuffer

StringBuffer是可变的。上代码,上真相。

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		StringBuffer buffer1 = new StringBuffer();
		buffer1.append("hello");
		StringBuffer buffer2 = buffer1;
		System.out.println("buffer1 = " + buffer1);
		System.out.println("buffer2 = " + buffer2);
		
		buffer1.append("world");
		System.out.println("buffer1 = " + buffer1);
		System.out.println("buffer2 = " + buffer2);
	}

}

输出:

buffer1 = hello
buffer2 = hello
buffer1 = helloworld
buffer2 = helloworld

StringBuilder

StringBuilder不是线程安全的,而StringBuffer是线程安全的,所以在多线程中需要使用StringBuffer,而单线程中使用StringBuilder更好,它不需要考虑同步问题。StringBuilder是从1.5开始支持的 这里,而StringBuffer 这里和String 这里是从1.0就开始支持了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值