当前位置: 首页 > 知识库问答 >
问题:

阵列上的克隆方法是深层拷贝还是浅层拷贝?

云隐水
2023-03-14

我不确定以下内容是否会导致深度复制或浅复制?

public void viewImages(final String[] instancesFilename) {

    String[] instances = (String[])instancesFilename.clone();    
}

有没有简单快速的方法可以深度复制字符串数组?

共有3个答案

左丘照
2023-03-14

这是一篇有趣的文章,讨论了如何使用序列化来制作深度拷贝。

调用图中的对象确实需要支持序列化,但是在许多三层应用程序的业务类型中,这是必要的。

本文用一些图表讨论了深度复制和浅层复制。

叶景龙
2023-03-14

array类还具有copyOf方法。这通常是我用来创建阵列副本的方法。以下是所有差异的解释:http://forum.codecall.net/topic/49450-copying-arrays/

苍志文
2023-03-14

Java中的字符串是可模仿的(不能改变它们的值)。所以复制字符串时,深拷贝和浅拷贝之间没有可检测的区别。

进一步参考:副本将很浅,但这应该不是问题,因为字符串是不可修改的。

哦,有趣的事实:字符串不能用clone方法克隆,所以如果你尝试用clone方法做字符串的深度复制,你会得到一个CloneNotSupport dException。

 类似资料:
  • 本文向大家介绍C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?相关面试题,主要包含被问及C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?时的应答技巧和注意事项,需要的朋友参考一下 (1)浅克隆 在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在

  • 问题内容: 似乎对此产生了很多困惑和不同意见([1]和其他来源),究竟会产生深拷贝还是浅拷贝。 该测试表明该副本很深: 该测试表明该副本较浅: 解决方案是否仅是制作顶层维度的深层副本,而其他维度是浅层副本?真相是什么? 问题答案: 它产生一个浅表副本,即一个包含“旧”引用的 新 数组(指向相同的对象,这些对象没有被复制)。 特别是,如果您有嵌套数组,则不会复制这些数组。您将得到一个新数组,其“顶级

  • 我已经编写了一个测试应用程序,用于演示使用浅层、深层和复制构造函数的Java克隆。 我实现了浅和深,但与复制构造函数我认为我错过了一些东西。 请查看下面的代码,并让我知道复制构造函数实现的修复方法。 输出(复制构造函数) 15007 Amit Chirimiri Kripalu 15007 Amit Chirimiri ShriKrishn 编辑: 由于学生类包含嵌套类(教师)引用,简单的复制构造

  • 本文向大家介绍Java克隆执行深拷贝,包括了Java克隆执行深拷贝的使用技巧和注意事项,需要的朋友参考一下 示例 要复制嵌套对象,必须执行深层复制,如本示例所示。            

  • 主要内容:到底是浅拷贝还是深拷贝对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: b 和 obj2 都是以拷贝的方式初始化的,具体来说,就是将 a 和 obj1 所在内存中的数据按照二进制位(Bit)复制到 b 和 obj2 所在的内存, 这种默认的拷贝行为就是 浅拷贝 ,这和调用 memcpy() 函数的效果非常类似。 对于简单的类,默认的拷贝构造函数一般就够用了,我们也没有必要再显式地定义一

  • 浅拷贝 对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。 也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。 深拷贝 那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。 也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。 参考链接: 深拷贝与浅拷贝的实现(一) javaScript中浅拷