java - 实体类里浅拷贝 与 深拷贝
1.背景
因为存在集合类 ,因此引出了浅拷贝与深拷贝,
浅拷贝无法将 List<TreeData> 这样的指定栈堆 的类型字段 new一个新的地址,需要使用深拷贝才能解决
2.浅拷贝
@Note("克隆对象") public TreeData cloneTd() { TreeData td = null; try { td = (TreeData) super.clone(); } catch (CloneNotSupportedException e) { throw new CustomResultException(ResultEn.ENTITY_CLONE_ERR.getCode(), ResultEn.ENTITY_CLONE_ERR.getMessage() + ":" + ExcBox.getExcMsg(e)); } if (null == td) throw new CustomResultException(ResultEn.ENTITY_CLONE_ERR); return td; }
3.深拷贝【存在bug且线程不安全】
@Note("克隆对象") public TreeData cloneTd() { TreeData td = new TreeData(planGid, pGid, name, valu, isObj, level, sort, vueType, enums, isMust, isInherit, isOCR, isMulFile, lcTm, null); List<TreeData> children = new ArrayList<>(); System.arraycopy(this.children, 0, children, 0,this.children.size());
td.setChildren(children);
return td;
}
仍然有缺点,只能深入到实体里的第一个 List<TreeData> children
3.深拷贝解决
要么使用递归一层一层克隆,要么使用json转换处理,都会开辟新的栈堆
本文来自博客园,作者:岑惜,转载请注明原文链接:https://www.cnblogs.com/c2g5201314/p/16666644.html
响应开源精神相互学习,内容良币驱除劣币
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话