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

相关推荐
曹轲恒15 小时前
Java中断
java·开发语言
xxxmine15 小时前
Java并发wait(timeout)
java
冰冰菜的扣jio15 小时前
Redis缓存问题——一致性问题、事务、持久化
java·spring·mybatis
施棠海16 小时前
监听与回调的三个demo
java·开发语言
時肆48516 小时前
C语言造轮子大赛:从零构建核心组件
c语言·开发语言
赴前尘16 小时前
golang 查看指定版本库所依赖库的版本
开发语言·后端·golang
de之梦-御风16 小时前
【C#.Net】C#开发的未来前景
开发语言·c#·.net
毕设源码-钟学长16 小时前
【开题答辩全过程】以 家政服务平台为例,包含答辩的问题和答案
java
知乎的哥廷根数学学派17 小时前
基于数据驱动的自适应正交小波基优化算法(Python)
开发语言·网络·人工智能·pytorch·python·深度学习·算法
de之梦-御风17 小时前
【C#.Net】C#在工业领域的具体应用场景
开发语言·c#·.net