String类、StringBuffer类与StringBuilder类之间的区别


提示:以下是本篇文章正文内容,下面案例可供参考

一、String类

String类是java中最常用引用类型。用String定义的字符串不可更改。
代码如下(示例):

		String str = "天王盖地虎";
		System.out.println(str);//天王盖地虎
		str.concat(str);//连接字符串,产生新的字符串
		System.out.println(str);//天王盖地虎

下面介绍几种常用的定义字符串的形式。
1.String str = “”;

String类中存在一个字符串常量池。当定义一个字符串s1后,会被字符串常量池会缓存,如果再定义一个内容相同的的字符串s2时,当前String类型的引用会指向字符串常量池中,因此字符串s1与字符串s2的地址相同。以这种形式定义的字符串在比较是否相等时可以使用“==”比较。

代码如下(示例):

		String s1 = "虎虎生威";
		String s2 = "虎虎生威";
		System.out.println(s1 == s2);//true

2.String str = new String(original);

使用new关键字,调用String类的有参构造方法,开辟新空间。以这种形式定义的字符串地址不同,因此不能使用“==”比较,可以使用equals()方法比较两个字符串内容是否相等。

代码如下(示例):

		String s1 = new String("虎虎生威");
		String s2 = new String("虎虎生威");
		System.out.println(s1 == s2);//false
		System.out.println(s1.equals(s2));//true

3.String str = new String(char[] value);

直接传入一个字符数组

代码如下(示例):

		char[] c= {'a','b','c'};
		String str = new String(c);
		System.out.println(str);//输出结果为:abc

4.String str = new String(value, offset, count);

value:传入的字符数组,offset:从当前下标开始,count:传入字符的个数

代码如下(示例):

		char[] c= {'a','b','c','d','e'};
		String str = new String(c, 2, 2);
		System.out.println(str);//输出结果为:cd

5.String str = new String(bytes, offset, length);

bytes:传入的字节数组,offset:从当前下标开始,length:传入字符的个数

代码如下(示例):

		byte[] c= {'a','b','c','d','e'};
		String str = new String(c, 2, 2);
		System.out.println(str);//输出结果为:cd

二、StringBuilder类

StringBuilder类是可变字符串,是AbstractStringBuilder类的子类.StringBuilder类中的方法没有使用synchronized关键字,所以它的方法都是线程不“安全”,但是性能好
代码如下(示例):

		StringBuilder stringbuilder = new StringBuilder("天王盖地虎");
		stringbuilder.append("小鸡炖蘑菇"); //在当前字符串后,追加字符串"小鸡炖蘑菇"
		System.out.println(stringbuilder);//天王盖地虎小鸡炖蘑菇

三、StringBuffer类

StringBuffer类与StringBuilder类都是可变字符串,是AbstractStringBuilder类的子类.唯一不同的是:StringBuffer类中的方法使用synchronized关键字,所以它的方法都是线程“安全”,但是性能差

代码如下(示例):

		StringBuffer stringbuffer = new StringBuffer("天王盖地虎");
		stringbuffer.append("小鸡炖蘑菇");
		System.out.println(stringbuffer);//天王盖地虎小鸡炖蘑菇

总结

String类不可变字符串,StringBuffer类和StringBuilder类都是可变字符串。而StringBuilder类中的方法没有使用synchronized关键字,所以它的方法都是线程不“安全”,但是性能好。StringBuffer类中的方法使用synchronized关键字,所以它的方法都是线程“安全”,但是性能差。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值