所谓String是不可以修改的字符串对象是这么个意思,当你创建一个String对象后(在栈内存中一个变量指向堆内存中的对象时),堆内存中的对象不能够改变,例如String str = "abc"; 你如果再使用str = str + "123"时,String已经不是原来的那个对象了,而是一个全新的String对象,该对象的值是abc123,而如果你使用StringBuffered和StringBuilder的
append()方法,则该方法不会重新创建一个对象,而是在原String对象的后面加上你指定的内容,看下面一段代码- public class TestStringBufferedAndString {
- public static void main(String[] args) {
- String str = "abc";
- String str1 = str;
- str = str + "123";
- System.out.println(str == str1); //打印结果为false,地址值不同,与原来不是同一个对象
- StringBuffer sb = new StringBuffer("cdf");
- StringBuffer sb1 = sb;
- sb.append("ghi");
- System.out.println(sb == sb1); //打印结果为true,地址值相同,没有重新创建对象
- }
- }
复制代码 总结:String是不可以修改的字符串对象,指的是String对象一旦创建,堆内存中的对象就不能改变,但没说不能改变栈内存中的引用,改变后的引用指向新创建的对象 |