【问题标题】:Clonning String array, checking the refs [duplicate]克隆字符串数组,检查参考 [重复]
【发布时间】:2013-01-27 23:52:37
【问题描述】:

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

(它将打印:

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)

    }

}

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

【问题讨论】:

标签: java clone


【解决方案1】:

克隆数组会产生浅拷贝。所以内容是一样的。如需深度克隆,请参阅here

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不认为字符串缓存在这个例子中起作用;数组中的任何其他类型的对象都会表现出相同的效果。
    猜你喜欢
    • 2014-07-03
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多