java:浅复制深复制,string 和 stringbuffer 的作用

209 阅读1分钟

image-20220423214446412

@Test
public void test() throws CloneNotSupportedException {
    /*
     * 浅复制,深复制
     * 浅复制是复制对象,属性还是一致的
     * 深复制是复制对象和属性,两个完全是隔离的。
     *
     * string 互相赋值,都是将栈内元素指向字符串常量池的索引。当其中一字符串改变的时候,另一个字符串指向不受影响。
     *
     * stringBuffer 和 stringBuilder 互相赋值,都是栈内元素指向同一个堆内元素,再由堆内元素指向同一个数据库常量池索引。
     * 当改变常量池索引的时候,两个字符串都会同时受到影响。
     * */

    String a = "1";
    String b = a;
    System.out.println(a == b);
    a = "2";
    System.out.println(a);
    System.out.println(b);
    System.out.println(a == b);

    StringBuilder c = new StringBuilder("3");
    StringBuilder d = c;
    c.replace(0, 1, "4");
    System.out.println(c);
    System.out.println(d);

}