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

相关推荐
Han.miracle几秒前
JavaScript 流程控制与数组实战闯关
开发语言·前端·javascript
青云交1 分钟前
Java 大视界 —— Java 大数据在智能农业病虫害精准识别与绿色防控中的创新应用
java·大数据·机器学习·智能农业·决策支持·病虫害识别·绿色防控
利刃大大1 分钟前
【SpringBoot】Bean作用域 && Bean生命周期 && SpringBoot自动配置操作 && 自动装配原理
java·spring boot·后端
程序员梁白开3 分钟前
吃透 Java 集合框架:单列集合与双列集合的核心原理与实战应用
java·开发语言·jvm·windows·spring·java-ee
切糕师学AI3 分钟前
JavaScript 深拷贝方案全解析:从兼容性到健壮性的优先级指南
开发语言·javascript
酸菜牛肉汤面4 分钟前
4、说一下类装载的执行过程?
java·jvm
AC赳赳老秦5 分钟前
批量文档处理自动化:DeepSeek + Python 实现多格式文件内容提取与汇总
开发语言·spring boot·elasticsearch·postgresql·kafka·政务·deepseek
菩提祖师_5 分钟前
基于大数据的电力负荷预测与调度研究
java·开发语言·网络·c++·物联网
csbysj20206 分钟前
jQuery 过滤
开发语言
菩提祖师_7 分钟前
基于Elasticsearch的全文检索系统优化
大数据·开发语言·深度学习·搜索引擎