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

相关推荐
稚辉君.MCA_P8_Java3 分钟前
DeepSeek Java 多线程打印的19种实现方法
java·linux·jvm·后端·架构
白露与泡影7 分钟前
spring Security 认证流程闭环与调用链路详解
java·后端·spring
卡比巴拉—林8 分钟前
Python print()函数详讲
开发语言·python
i***58679 分钟前
Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex
java·人工智能·spring
6***09269 分钟前
MS SQL Server partition by 函数实战三 成绩排名
java
i***279512 分钟前
SpringBoot实现异步调用的方法
java·spring boot·spring
d***292415 分钟前
Springboot中SLF4J详解
java·spring boot·后端
阿在在16 分钟前
Dubbo 与 Spring 整合全流程解析(含生产者与消费者
java·spring·dubbo
奶思图米球16 分钟前
Python多环境管理
开发语言·python
JienDa21 分钟前
JienDa聊PHP:基于协同架构的PHP主流框架优势整合与劣势补救策略
开发语言·架构·php