String、StringBuffer和StringBuilder的区别

来源:互联网 发布:订货会系统源码 编辑:程序博客网 时间:2024/06/06 13:07

一、   三者的区别

1、String  不可变:有“final”修饰符

private final char value[];


StringBuffer和StringBuilder可变:

均继承自AbstractStringBuilder类,在AbstractStringBuilder中使用字符数组保存字符串,可变。

    char[] value;


2、StringBuffer加锁,所以线程安全,但是效率低

StringBuilder不加锁,所以线程不安全,但是效率高

效率排行榜

StringBuilder >StringBuffer > String 


二、   String的特殊性

String str1 ="xiao ming ";    // 字符串定义在静态区域。(存放静态成员 static定义的 大小有限)

String str2 = newString( "xiao ming ");   // 字符串定义在动态区域即堆内存

 

 


——String缓冲池内不存在与其指定值相同的String对象,虚拟机将创建新String对象,存在则直接返回已存在的String对象的引用。

即先在静态区域找是否有值相同的对象,有则直接指向此变量。