Cloning String数组,检查refs

时间:2013-02-12 16:00:55

标签: java clone

使用java数组上的clone()方法克隆String数组。克隆后,我希望在新数组中有新的字符串 - 为它们分配新的地址。但是......我的行为有点不同,请看这个:

(将打印:

same address
One

public class ArrayCopyClone {

    static String[] array2 = new String[] {"One", "Two", "Three"};

    public static void main(String[] args) {

        String[] copy2 = array2.clone();

        if (copy2[0] != array2[0])  {
            System.out.println("good");   // will never show up
        } else {
           System.out.println("same address");  // I'm expecting never be here
        }

        array2[0] = "new";

        System.out.println(copy2[0]); // "One", and this is OK (it means we have a copy)

    }

}

它与字符串阴影有关吗?应该是吗?

2 个答案:

答案 0 :(得分:1)

克隆数组会得到一个浅表副本。所以内容是相同的。有关深度克隆,请参阅here

答案 1 :(得分:0)

首先,默认情况下clone()未实现为“深度克隆”,因此它将子对象复制为引用。此外,字符串由JDK缓存。你暴露了2这些效果。