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

相关推荐
寻星探路13 小时前
【算法专题】哈希表:从“两数之和”到“最长连续序列”的深度解析
java·数据结构·人工智能·python·算法·ai·散列表
q***441513 小时前
SpringSecurity踢出指定用户
java
SHolmes185413 小时前
Python all函数 判断是否同时满足多个条件
java·服务器·python
shejizuopin14 小时前
基于JavaSSM+MySQL的实验室考勤管理系统设计与实现
java·mysql·vue·毕业设计·论文·springboot·实验室考勤管理系统设计与实现
ZEERO~14 小时前
@dataclass的作用
开发语言·windows·python
南行*14 小时前
C语言Linux环境编程
linux·c语言·开发语言·网络安全
J***516814 小时前
SpringSecurity的配置
java
Morwit14 小时前
Qt qml创建c++类的单例对象
开发语言·c++·qt
面汤放盐14 小时前
软件架构指南 Software Architecture Guide
java·微服务·devops
tkevinjd14 小时前
JUC5(线程池)
java·线程池·多线程·juc