String、StringBuffer和StringBuilder类的区别

1. String类在java中是不可变类,因为它被关键字final修饰。即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。从安全上讲,因为不可变的对象不能被改变,他们可以在多个线程之间进行自由共享,这消除了      进行同步的要求;从效率上讲,设计成final,JVM才不用对相关方法在虚函数表中查询,而是直接定位到String类的相关方法          上,提高执行效率;总之,由于效率和安全问题,String被设计成不可变的。

 Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

2. StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer对象被创建以后,通过StringBuffer提供的append()、    insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想        要的字符串,就可以调用它的toString()方法将其转换为一个String对象。StringBuffer是线程安全的。

3. JDK1.5又新增了一个StringBuilder类,它也代表字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法基本相同。不同的是,StringBuffer的大部分方法被synchronized修饰,而StringBuilder则没有。所以StringBuilder性能略高,但不是线程安全的。

4. String:适用于少量的字符串操作的情况

    StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

    StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

猜你喜欢

转载自blog.csdn.net/N2H4N2H4/article/details/82023729