String、StringBuffer和StringBuilder 区别

来源:互联网 发布:入侵学校数据库 编辑:程序博客网 时间:2024/06/10 00:47

一、     三者的区别

String  不可变

StringBufferStringBuilder可变

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

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

效率排行榜

StringBuilder > StringBuffer > String 

二、     String的特殊性

String str1 = "xiao ming ";    // 字符串定义在静态区域

String str2 = new String( "xiao ming ");   // 字符串定义在堆内存



三、

1.String  不可变       

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

上图是在JDK 源码中:  append() 方法有 加了 (synchronized  同步锁

所以是线程安全的!



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


上图在JDK源码中 常用方法  append() 截图! 可见并未加同步锁!


四、在什么时候使用 StringBuffer 和 StringBuilder 呢?

1. 在不涉及到线程问题的情况下使用 StringBuilder ;因为效率高。

2. 有涉及到线程问题的情况下使用 StringBuffer ;因为线程安全。


以上是我学习过程中遇到问题 并请教后的结果!

原创粉丝点击