Java--String、StringBuffer、StringBuilder之间的区别:

在Java语言中,共有byte、short、int、long、float、double、boolean、char 8个基本数据类型,其中char类型表示单个

字符。在实际的编程过程中,我们比较常用的是由多个字符组成的“字符串”,由于没有表示“字符串”的基本数据类型,所以Java

提供了一个被final修饰、不能被继承的类String,从而为我们能够使用字符串类型提供了方便。随着Java语言的不断发展,又衍

生出了StringBuffer和StringBuilder两个字符串构建器。

对于String、StringBuffer、StringBuilder这三种类型,无论在求职过程中的面试还是以后的实际工作中,我们都要经常面

对,所以掌握三者分别的内容、特点、用途、注意事项及三者之间的区别显得尤为重要。

1. String

通过以上所述,我们已经大致知道String类型是一个被final关键字修饰、不能被继承类,包含在java.lang包。关于String类

的实例化,有以下两种方法,一种是直接赋值法,这种方法最为常用;另一种是传统方法,使用new关键字进行实例化,具体如

下:

//1.直接赋值

String str = "Hello World !" ; // str是一个对象,那么"Hello World !" 就应该保存在堆内存中

//2.传统方法(构造法)

String str = new String("Hello World !");//该方法符合传统做法,使用关键字new进行对象实例化。

String类的具体用法请参照我的“String类“==”与equals()的区别”与“String类的常用方法总结”博文,其中对String类的常用方法进行

了较为详细地说明,有兴趣的童鞋可以参考参考。

String 类的缺陷 :不能对String类创建的对象进行增、删、改等操作;

                              String类不能被继承。

String 类的特点:任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的只

是其引用的指向而已。

2. StringBuffer

StringBuffer 类是为了解决String 类的缺陷中不能对String 类创建的对象进行增、删、改等操作而产生的。StringBuffer 类

 

有很多和String 类一样的方法,这些方法在功能上和String中的功能相同。

String类中使用“ + ”来进行字符串连接,但是这个操作在StringBuffer类中需要更改为appen() 方法:

public synchronized StringBuffer append(各种数据类型 b)

StringBuffer类中字符串连接操作的简单举例:

public class Test{
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer();
	    sb.append("Hello").append("World");
		fun(sb);
		System.out.println(sb);
		}
    public static void fun(StringBuffer temp) {
		temp.append("happy").append("everyday");
	}
}

   2.1 String 类和 StringBuffer 类的区别:

2.1.1 String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的情况建议使用StringBuffer 类;

2.1.2 StringBuffer 类的内部实现方式和String 类不同,StringBuffer 类在进行字符串修改时不产生新的对象。在内存的使

用上StringBuffer类优于String类;

2.1.3 StringBuffer对象的初始化与String对象的初始化不大相同。通常情况下采用构造方法对StringBuffer的对象进行初始

化;

           2.1.4 StringBuffer是线程安全的,可用于多线程。

   2.2 String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:

2.2.1 String变为StringBuffer:利用StringBuffer的构造方法或append()方法;

2.2.2 StringBuffer变为String:调用toString()方法。

   2.3 StringBuffer类中String类没有的方法:

            2.3.1 字符串反转:

public synchronized StringBuffer reverse()

           2.3.2 删除指定范围的数据:

public synchronized StringBuffer delete(int start, int end)

2.3.3 插入数据

public synchronized StringBuffer insert(int offset, 各种数据类型 b)

3. StringBuilder

在JDK5.0 之后,Java语言有引入了StringBuilder 类,这个类是在StringBuffer类的基础上产生的。StringBuilder类的效率

较低,但允许采用多线程的方式进行添加或者删除字符的操作。如果所有的字符串在一个单线程中,则应该需要用StringBuilder

类。StringBuilder 类和StringBuffer类的api完全相同。

4. String 、StringBuffer 、StringBuilder的区别:

4.1 操作效率方面:StringBuilder > StringBuffer > String;

4.2 线程安全方面:StringBuffer是线程安全的,可用于多线程;StringBuilder是非线程安全的,可用于单线程;

4.3 频繁字符串操作方面:StringBuilder和StringBuffer优于String;

4.4 String的内容不可修改,StringBuffer和StringBuilder的内容可以修改。这里的修改指的是字符串的内容或长度;

4.5 StringBuffer 采用同步处理,属于线程安全操作;StringBuilder采用异步处理,属于线程不安全操作。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值