Java的String,StringBuffer以及StringBuilder

1 String对象及其特点

a)       不变性:指String对象一旦生成,则不能在对他进行改变。

b)       对常量池的优化:当两个String对象拥有相同的值时,他们只是引用常量池的同一个进行拷贝(不重新new对象,不分配内存,只是添加一个指针)。

c)       类final的定义:作为final类的Sting对象在系统中不可能有任何子类,这是对系统的保护。

public static void main(String[] args) {
		String a = "abc";
		String b = "abc";
		System.out.println(a==b);
		System.out.println(a.equals(b));
	}

两个输出都为true,对着个程序进行深度分析:

对于a==b, a中存放的是字符串"abc"在存中存放的地址,b中也是一样,所以a==b的值为true

对于equals方法比较的是a、b中存放内存地址指向的值,由于都是"abc"所以结果也是true。

2 StringBuffer和StringBuider的选择

StringBuffer和StringBuilder是一对孪生兄弟,都是实现了AbstractStringBuilder抽象类,拥有几乎相同的对外接口,最大的不同:StringBuffer对所有的方法是同步的,StringBuilder并没有做任何的同步。

      由于方法同步需要消耗一定的系统资源,因此,StringBuilder的效率比较好,但是在多线程中,StringBuilder无法保证线程安全。

      String的累加操作:String的concat()方法效率远高于“+”和“+=”运算符,但又远远低于StringBuffer类,通过StringBuffer()和append()方法对String进行累加优化。


程序效率对比:

package lh.zjzk;

public class StringBuilderStringBuffer {

	public static void main(String[] args) {
		//效率对比
		long l1 = System.currentTimeMillis();
		String s = "";
		for(int i = 0;i < 10000;i++){//使用 + 运算连接做为
			s += i;
		}
		long l2 = System.currentTimeMillis();
		System.out.println("+ 运算 时间为:"+(l2-l1));
		
		 l1 = System.currentTimeMillis();
		String s2 = "";
		for(int i = 0;i < 10000;i++){//使用 + 运算连接做为
			s2.concat("a");
		}
		l2 = System.currentTimeMillis();
		System.out.println("concat 运算 时间为:"+(l2-l1));
		
		
		l1 = System.currentTimeMillis();
		StringBuffer s3 = new StringBuffer();
		for(int i = 0;i < 10000;i++){//使用 + 运算连接做为
			s3.append(i);
		}
		l2 = System.currentTimeMillis();
		System.out.println("StringBuffer运算 时间为:"+(l2-l1));
		
		l1 = System.currentTimeMillis();
		StringBuilder s4 = new StringBuilder();
		for(int i = 0;i < 10000;i++){//使用 + 运算连接做为
			s4.append(i);
		}
		l2 = System.currentTimeMillis();
		System.out.println("StringBuilder 运算 时间为:"+(l2-l1));
		
	}

}
结果:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值