在java中,使用数组如何防止操作对象的引用造成错误

情况一、

复制代码
List<Grid> grids = new ArrayList<>();
// 添加一些元素到 grids
List<Grid> newList = grids;
// 在 grids 中添加新元素
grids.add(new Grid());

在这种情况下,newList 和 grids 实际上引用的是同一个对象。也就是说,它们只是不同的引用名,但指向相同的 ArrayList 实例。因此,对 grids 进行的任何修改(如添加或删除元素)都会反映在 newList 中,反之亦然。

情况二、

复制代码
List<Grid> grids = new ArrayList<>();
// 添加一些元素到 grids
List<Grid> newList = grids.stream().collect(Collectors.toList());
// 在 grids 中添加新元素
grids.add(new Grid());

// newList 不会包含新添加的元素

当你使用 grids.stream().collect(Collectors.toList()) 时,它会创建一个新的 List 对象,包含 grids 中的所有元素。这意味着新创建的 List 与原来的 grids 是独立的。如果之后在 grids 中插入新的值,这些值不会影响之前通过 collect(Collectors.toList()) 方法得到的 List,因为它们是两个不同的对象。

相关推荐
magic 2457 分钟前
《Maven高级应用:继承聚合设计与私服Nexus实战指南》
开发语言·nexus
爱喝热水的呀哈喽12 分钟前
Java collection实例电影尝试
java·windows·python
小画家~13 分钟前
第十八:GC 垃圾回收
java·开发语言·jvm·golang
淳于韻珊1 小时前
Java语言的散点图
开发语言·后端·golang
python_chai1 小时前
Python核心数据结构详解:元组、集合与字典
java·数据结构·python
老华带你飞2 小时前
医药垃圾分类管理系统|基于SSM+vue医药垃圾分类管理系统的系统设计与实现(源码+数据库+文档)
java·数据库·vue·毕业设计·论文·ssm·医药垃圾分类管理系统
程序员小续2 小时前
React 多个 HOC 嵌套太深,会带来哪些隐患?
java·前端·javascript·vue.js·python·react.js·webpack
mmmayang3 小时前
Golang 项目平滑重启
开发语言·后端·golang
褚翾澜3 小时前
Go语言的可选链
开发语言·后端·golang
rider1893 小时前
【9】搭建k8s集群系列(二进制部署)之安装work-node节点组件(kube-proxy)和网络组件calico
java·容器·kubernetes