对String对象进行substring、contact等操作时,不会在基础的String对象上进行改变,而是会产生一个新的字符串,保存操作后的字符串。
String a = "I"+"love"+"You".
JVM在执行这一段代码的时候,会优化为 String a = "IloveYou"。所以效率反而会很高,但是如果是几个String对象相加,那JVM就不会优化,效率就不会这么高。但是如果在一个循环里使用到了+来处理String,JVM每一次都会new一个StringBuilder来进行处理,如果循环次数很多,会造成大量的内存浪费。
StringBuffer和StringBuilder的区别在于线程安全,StringBuffer的大多数方法都会有synchronized关键字,在多线程的情况下操作同一个字符串的时候用StringBuffer,保证线程安全。但是大多数情况下用不到这一点,StringBuilder更为高效。