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

相关推荐
Prejudices2 分钟前
C++如何调用Python脚本
开发语言·c++·python
Daniel 大东2 分钟前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞9 分钟前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea
HappyAcmen9 分钟前
IDEA部署AI代写插件
java·人工智能·intellij-idea
马剑威(威哥爱编程)14 分钟前
读写锁分离设计模式详解
java·设计模式·java-ee
我狠狠地刷刷刷刷刷15 分钟前
中文分词模拟器
开发语言·python·算法
鸽鸽程序猿15 分钟前
【算法】【优选算法】前缀和(上)
java·算法·前缀和
修道-032316 分钟前
【JAVA】二、设计模式之策略模式
java·设计模式·策略模式
wyh要好好学习18 分钟前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf
AitTech19 分钟前
C#实现:电脑系统信息的全面获取与监控
开发语言·c#