String StringBuer StringBuilder 三者的区别
String 是固定长度的字符串,如果要发生变化必须重新生成新的实例;
String 字符串常量
StringBuer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuer 类型的主要性能区别其实在于 String
是不可变的对象,
而如果是使用 StringBuer 类则结果就不一样了,每次结果都会对
StringBuer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所
以在一般情况下我们推荐使用 StringBuer ,特别是字符串对象经常改变的
情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释
成了 StringBuer 对象的拼接,所以这些时候 String 对象的速度并不会比
StringBuer 对象慢,而特别是以下的字符串对象生成中, String 效率是远
要比 StringBuer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuer Sb = new StringBuilder(“This is only a”).append(“
simple”).append(“ test”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候
StringBuer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,
在 JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。
但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度
就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做