Java 中 String,StringBuer 与 StringBuilder 的区别
今天遇到 String 和 StringBuer 的相互转换,趁机总结一下。
String 字符串常量
StringBuer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuer 类型的主要性能区别其实在于 String
是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成
了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内
容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,
特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定
会相当慢的。
而如果是使用 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 对象的速度简直太快了,而这个时候