You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中FixedVector的clone方法为何是shallow clone而非deep clone?

为什么该FixedVector的clone方法属于浅拷贝而非深拷贝

首先明确判断深浅拷贝的核心标准:是否在拷贝时递归复制所有引用类型成员指向的实际对象,外层对象是否新建从来不是判断依据。

你提到的clone方法核心实现如下:

public Object clone() {
  FixedVector c = new FixedVector(data.length);
  for (int i = 0; i < length; ++i) {
    c.data[i] = data[i];
  }
  return c;
}

它属于浅拷贝的具体原因:

  • 该实现确实新建了FixedVector实例,也为新实例初始化了独立的底层data数组,但数组中存储的是Object类型的引用地址。循环赋值时仅做了引用地址的复制,没有对数组内存储的每个元素对象本身做克隆。
  • 拷贝完成后,原对象和克隆对象的data数组虽然是两个独立数组,但两个数组相同下标位置存的引用指向堆里的同一个对象实例。只要修改其中一个vector里存储的可变对象的内部属性,另一个vector里的对应对象也会同步变化,二者没有完全独立。

浅拷贝特征:仅复制当前对象本身、以及对象内基础类型的实际值,引用类型成员只复制引用地址,拷贝后原对象和克隆对象会共享引用类型的成员实例。
深拷贝特征:除了复制当前对象本身,还会递归复制所有引用类型成员指向的实际对象,拷贝完成后原对象和克隆对象完全独立,任意一方修改自身的任何内容都不会影响另一方。

如果要将该方法改造为深拷贝,循环赋值时不能直接传递元素引用,需要对每个存储的元素单独生成独立副本(比如对支持克隆的元素调用其自身的clone方法、通过序列化反序列化生成新实例等),再放入新数组中。

内容的提问来源于stack exchange,提问作者Osca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:54:22