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

相关推荐
!停3 分钟前
C语言顺序表
c语言·开发语言
你怎么知道我是队长7 分钟前
python---新年烟花
开发语言·python·pygame
智算菩萨12 分钟前
【Python机器学习】主成分分析(PCA):高维数据的“瘦身术“
开发语言·python·机器学习
爬山算法13 分钟前
Hibernate(15)Hibernate中如何定义一个实体的主键?
java·后端·hibernate
廋到被风吹走15 分钟前
【Spring】Spring AMQP 详细介绍
java·spring·wpf
stars-he17 分钟前
单相可控整流电路的MATLAB仿真设计(2)
开发语言·matlab
一起养小猫1 小时前
LeetCode100天Day6-回文数与加一
java·leetcode
AC赳赳老秦1 小时前
政务数据处理:DeepSeek 适配国产化环境的统计分析与报告生成
开发语言·hadoop·spring boot·postgresql·测试用例·政务·deepseek
程序员小假1 小时前
我们来说一下 MySQL 的慢查询日志
java·后端
xlxxy_2 小时前
abap 批量创建供应商
运维·开发语言·sap·abap·pp·mm