在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,因为它们是两个不同的对象。

相关推荐
柒.梧.1 分钟前
Spring核心知识全解析:从入门实战到进阶
java·后端·spring
乌日尼乐4 分钟前
【Java基础整理】Java字符串处理,String、StringBuffer、StringBuilder
java·后端
全栈独立开发者11 分钟前
点餐系统装上了“DeepSeek大脑”:基于 Spring AI + PgVector 的 RAG 落地指南
java·人工智能·spring
dmonstererer13 分钟前
【k8s设置污点/容忍】
java·容器·kubernetes
super_lzb18 分钟前
mybatis拦截器ParameterHandler详解
java·数据库·spring boot·spring·mybatis
程序之巅19 分钟前
VS code 远程python代码debug
android·java·python
liulilittle21 分钟前
XDP VNP虚拟以太网关(章节:一)
linux·服务器·开发语言·网络·c++·通信·xdp
我不是8神23 分钟前
Qt 知识点全面总结
开发语言·qt
我是Superman丶31 分钟前
【异常】Spring Ai Alibaba 流式输出卡住无响应的问题
java·后端·spring
墨雨晨曦8831 分钟前
Nacos
java