java中String、StringBuffer、StringBuilder的区别

本文详细比较了String、StringBuilder与StringBuffer的区别,重点分析了它们在可变性、线程安全性及性能上的不同,并解释了如何根据实际需求选择最适合的类。

转载:http://www.cnblogs.com/xudong-bupt/p/3961159.html

1.可变与不可变

  String 类中使用 final 修饰的char[]数组保存数据,不可变:

    private final char value[];

  StringBuilder StringBuffer 都是使用 cha[]数组保存数据,是可变的。

    char[] value;

 

2.是否多线程安全

  - String中的对象是不可变的,是线程安全的。

  - StringBuffer 对方法添加了 synchronized 同步锁,所以是 线程安全的:

public synchronized StringBuffer reverse() {
		super.reverse();
		return this;
	}

	public int indexOf(String str) {
		return indexOf(str, 0); // 存在 public synchronized int indexOf(String str, int fromIndex) 方法
	}

        - StringBuilder 并没有对方法进行加同步锁,所以是 非线程安全的

 

 3.StringBuilder 与 StringBuffer 共同点

  StringBuilderStringBuffer有公共父类AbstractStringBuilder(抽象类)。

  StringBuilderStringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

  如果程序不是多线程的,那么使用 StringBuilder 效率高于 StringBuffer 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值