【发布时间】:2020-06-16 00:11:48
【问题描述】:
所以我仍然在努力理解如何创建获取不同副本并返回 em 的方法。以下是以下问题,我的尝试低于此。
编写一个方法,它将对 StringBuffer 对象数组的引用作为参数,并返回该参数数组的引用、浅拷贝和深拷贝。请注意,并非数组的每个位置都会引用 StringBuffer 对象,有些可能是 null。
public static void main(String[] args) {
// TODO Auto-generated method stub
//probOne();
StringBuffer[] abc = new StringBuffer[]{new StringBuffer("Anakin"),new StringBuffer("Luke"),new StringBuffer("Ben")};
System.out.println(abc);
StringBuffer[] cba = refCopy(abc);
System.out.println(cba);
cba = shalCopy(abc);
System.out.println(cba);
cba = deepCopy(abc);
System.out.println(cba);
}
public static StringBuffer[] refCopy(StringBuffer[] sa)
{
StringBuffer[] sb = sa;
return sb;
}
public static StringBuffer[] shalCopy(StringBuffer[] sa)
{
StringBuffer[] copy = new StringBuffer[sa.length];
copy=sa;
return copy;
}
public static StringBuffer[] deepCopy(StringBuffer[] sa)
{
StringBuffer[] copy = new StringBuffer[sa.length];
for (int i = 0; i < copy.length; i++) {
copy[i] = sa[i];
}
return copy;
}
编辑1:我改变了深拷贝方法
public static StringBuffer[] deepCopy(StringBuffer[] sa)
{
StringBuffer[] copy = new StringBuffer[sa.length];
for (int i = 0; i < copy.length; i++) {
copy[i] = new StringBuffer(sa[i]);
}
return copy;
}
【问题讨论】:
-
您的
deepCopy很浅,shalCopy和refCopy都是参考副本。真正的深拷贝会为数组中的每一个创建一个新的 StringBuffers。 -
现在正确吗?
-
根据问题文本,您还应该考虑为空的条目,并将它们保留为空,而不是为它们创建新的 StringBuffer
标签: java