Java String,StringBuilder,StringBuffer的区别
2017-03-15 20:15
387 查看
三者的区别:
String 字符串常量StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。但值得注意的是:
在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
String S1 = “1” + “ 2” + “ 3”;
StringBuffer Sb = new StringBuilder(“1”).append(“ 2”).append(“ 3”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String S1 = “1” + “2” + “3”; 其实就是:
String S1 = “123”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “1”;
String S3 = “2”;
String S4 = “ 3”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
相关文章推荐
- Java String之String和CharSequence、StringBuilder和StringBuffer的区别(1)
- java中字符串操作string、stringBuffer和stringBuilder的区别以及其相关操作技术
- JAVA中String,StringBuffer与StringBuilder的区别
- java语言中String,StringBuffer,StringBuilder的区别
- JAVA——(1)基础补充之运算符、字符串、数组、内存分配(String,StringBuffer,StringBuilder的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- 【Java基础】String、StringBuffer与StringBuilder之间区别
- 在JAVA中,String,Stringbuffer,StringBuilder 的区别
- Java中String,StringBuilder和StringBuffer的区别
- Java面试04--StringBuffer、StringBuilder、String的区别
- Java 中的字符串类String、StringBuffer、StringBuilder的区别
- JAVA中String、StringBuffer、StringBuilder的区别
- java核心API之String,StringBuffer和StringBuilder以及equals与==的区别和联系
- 从源码看Java中String,StringBuffer,StringBuilder的区别
- 回首Java——String、StringBuffer与StringBuilder之间区别
- Java中的String、StringBuffer和StringBuilder的区别
- Java基础12:String、StringBuffer和StringBuilder的区别
- Java基础之String、StringBuffer与StringBuilder的区别及应用场景
- java中String、StringBuffer、StringBuilder的区别
- java中String、StringBuffer、StringBuilder的区别