1.String对象具有只读性,对他的任何引用都不能改变他的值,例如:String s="abc"+"def"+"mango"+"47";
其工作原理是1.abc先与def结合形成新的对象A,对象A又于mango结合生成新的对象B,对象B由于47结合生成新的对象C,在生成最终的对象时会产生一堆垃圾对象,
- public class test {
- public static void main(String[] args) {
- String a = "abc";
- String b = "abc";
- System.out.println(a == b); // true
- String c = new String("abc");
- System.out.println(a == c); // false
- System.out.println(a.equals()); // true
- }
- }
使用+连接字符串每次都生成新的对象,而且是在堆内存上进行,而堆内存速度比较慢(相对而言),那么再大量连接字符串时直接+是不可取的,当然需要一种效率高的方法。Java提供的StringBuffer和StringBuilder就是解决这个问题的。区别是前者是线程安全的而后者是非线程安全的。此外,值得注意的一点是,驻留池是不会被GC回收的,它会在程序运行期间一直保留。
2.